XSLT / условный for-each с тем же значением родительского (дядя) узла - PullRequest
0 голосов
/ 24 июня 2019

Мне нужна помощь в понимании того, как я могу выбрать только определенные узлы, имеющие одинаковое значение родительского (или дяди) элемента. Мой XML выглядит так

<shipment>
  <goodslines>
    <goodsline>
        <position>1</position>
        <packagenumbers>
            <packagenumber>123</packagenumber>
        </packagenumbers>
    </goodsline>
    <goodsline>
        <position>1</position>
        <packagenumbers>
            <packagenumber>456</packagenumbers>
        </packagenumbers>
    </goodsline>
    <goodsline>
        <position>2</position>
        <packagenumbers>
            <packagenumber>789</packagenumbers>
        </packagenumbers>
    </goodsline>
  </goodslines>
</shipment>

и желаемый результат будет:

123,456
789

Так что мне нужно было бы сделать для каждого «уровень упаковки» - уровень так, чтобы он принимал во внимание элемент «позиция» с верхнего уровня

XSL может быть что-то вроде этого?

        <xsl:for-each select="shipment/goodslines/goodsline[some condition here?]/packagenumbers/packagenumber">
            <xsl:value-of select="current()"/>
            <xsl:if test="not(position() = last())">
                <xsl:text>,</xsl:text>
            </xsl:if>
            <xsl:text>&#xa;</xsl:text>
        </xsl:for-each>

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 24 июня 2019

Если ваш xml всегда имеет одну и ту же структуру, вы можете использовать это:

<xsl:template match="goodsline[position = preceding-sibling::goodsline[1]/position]">
    <xsl:text>,</xsl:text>
    <xsl:value-of select="packagenumbers/packagenumber"/>
</xsl:template>

<xsl:template match="goodsline">
    <xsl:text>&#xa;</xsl:text>
    <xsl:value-of select="packagenumbers/packagenumber"/>
</xsl:template>

Более конкретные шаблоны (те, что с условием) всегда будут в первую очередь и имеют более высокий приоритет.Вероятно, есть другое простое решение для каждой группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...