XSLT 1.0 удалить узлы - PullRequest
       7

XSLT 1.0 удалить узлы

0 голосов
/ 12 ноября 2018

Как я могу удалить некоторые конкретные узлы?

В моем примере у меня много узлов в сегменте REF, но я просто хочу использовать REF с Qualifier GS, все остальные должны быть удалены.

<ITEM>
    <ITEM_NUMBER_EN>123456789</ITEM_NUMBER_EN>
    <ITEM_NUMBER_IN>1234</ITEM_NUMBER_IN>
    <ITEM_NUMBER_SA>1234</ITEM_NUMBER_SA>
    <QUANTITY>1</QUANTITY>
    <QUANTITY_UNIT>PCE</QUANTITY_UNIT>
    <LINE_ITEM_NUMBER>1</LINE_ITEM_NUMBER>
    <AMOUNT_DETAILS>
        <QUALIFIER>AAA</QUALIFIER>
        <AMOUNT>1.00</AMOUNT>
        <CURRENCY>EUR</CURRENCY>
    </AMOUNT_DETAILS>
    <REF>
        <QUALIFIER>CR</QUALIFIER>
        <REFERENCE>1234</REFERENCE>
        <ADDITIONAL_INFO/>
    </REF>
    <REF>
        <QUALIFIER>GS</QUALIFIER>
        <REFERENCE>5647</REFERENCE>
        <ADDITIONAL_INFO/>
    </REF>
    <REF>
        <QUALIFIER>LI</QUALIFIER>
        <REFERENCE>1</REFERENCE>
        <ADDITIONAL_INFO/>
    </REF>
    <PACKAGE_DETAILS>
        <!-- ... -->
    </PACKAGE_DETAILS>
</ITEM>

Вам нужна дополнительная информация о моем XML?

Редактировать: вывод должен быть:

<ITEM>
    <ITEM_NUMBER_EN>123456789</ITEM_NUMBER_EN>
    <ITEM_NUMBER_IN>1234</ITEM_NUMBER_IN>
    <ITEM_NUMBER_SA>1234</ITEM_NUMBER_SA>
    <QUANTITY>1</QUANTITY>
    <QUANTITY_UNIT>PCE</QUANTITY_UNIT>
    <LINE_ITEM_NUMBER>1</LINE_ITEM_NUMBER>
    <AMOUNT_DETAILS>
        <QUALIFIER>AAA</QUALIFIER>
        <AMOUNT>1.00</AMOUNT>
        <CURRENCY>EUR</CURRENCY>
    </AMOUNT_DETAILS>
    <REF>
        <QUALIFIER>GS</QUALIFIER>
        <REFERENCE>5647</REFERENCE>
        <ADDITIONAL_INFO/>
    </REF>
    <PACKAGE_DETAILS>
        <!-- ... -->
    </PACKAGE_DETAILS>
</ITEM>

Моя текущая попытка выглядит так:

<!--delete REF node-->
<xsl:template match="REF">
  <xsl:for-each select ="./REF">
    <xsl:if test="./QUALIFIER='LI'">
    </xsl:if>
  </xsl:for-each>
  <!--copy all other nodes-->
  <xsl:apply-templates select="@* | node()"/>
</xsl:template>

Мое единственное решение на данный момент - удалить все остальные отдельно с помощью:

<xsl:template match="REF[QUALIFIER='CR']"/>

<xsl:template match="REF[QUALIFIER='LI']"/>

1 Ответ

0 голосов
/ 12 ноября 2018

Вы хотите удалить все <REF> узлы, где квалификатор не является "GS".

<xsl:template match="REF[@QUALIFER != 'GS']" />

Это все, что необходимо, в дополнение к шаблону идентификации (который у вас уже есть).

...