Как я могу выбрать один элемент из XML с помощью xsl?

NeunNatter спросил: 13 октября 2017 в 07:36 в: xml

Привет, у меня возникла проблема с файлом XML. Мне здесь помогли, но после этого я столкнулся с другой проблемой. Я попытался выбрать первый элемент в файле XML и скопировать его в другую позицию.

это оригинал:

<products>
     <product>
        <OrderingInfo>
            <item name="Part No.">12345 (text)</item>
            <item name="Part No.">12345IP (text)</item>
        </OrderingInfo>
        <varitems>
        </varitems>
    </product>     <product>
        <OrderingInfo>
            <item name="Part No.">001 (text)</item>
            <item name="Part No.">002 (text)</item>
        </OrderingInfo>
        <varitems>
        </varitems>
     </product>
</products>

желаемый вывод:

<products>
     <product>
        <OrderingInfo>
            <item name="Part No.">12345 (text)</item>
            <item name="Part No.">12345IP (text)</item>
        </OrderingInfo>
        <varitems>
            <item>
              <varno>14205</varno>
              <text>text</text>            </item>
            <item>
              <varno>14205</varno>
              <text>text</text>
            </item>
        </varitems>
    </product>     <product>
        <OrderingInfo>
            <item name="Part No.">001</item>
            <item name="Part No.">002</item>
        </OrderingInfo>
        <varitems>
            <item>
              <varno>001</varno>
              <text>text</text>
            </item>
            <item>
              <varno>001</varno>
              <text>text</text>
            </item>
        </varitems>
     </product>
</products>

Я использую его

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    </xsl:template>
      <xsl:template match="OrderingInfo">
        <xsl:copy-of select="."/>
        <varitems></varitems>
    </xsl:template>
    <xsl:template match="varitems">
        <xsl:copy>
            <xsl:for-each select="ancestor::product/OrderingInfo/item">
                <item>
                    <varno><xsl:value-of select="/*/product/OrderingInfo/item[1]"/></partno>
                    <vartitle><xsl:value-of select="normalize-space(translate(substring-after(current(),' '),'()',''))"/></vartitle>
                </item>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
 </xsl:stylesheet>

Я пытался выбрать элемент с частью /*/product/OrderingInformation/item[1], но он всегда выбирает первый ряд OrderingInfo и из первого продукта

0 ответов