Удалить родителя, если дочерний элемент содержит текст (в cdata) - PullRequest
0 голосов
/ 14 июня 2019

Я хотел бы удалить родителя, если значение дочернего узла содержит определенный текст:

<SHOP>
    <SHOPITEM>
        <NAME>TEST 1 </NAME>
        <MANUFACTURER>
            <![CDATA[Apple]]>
        </MANUFACTURER>
    </SHOPITEM>
    <SHOPITEM>
        <NAME>TEST 2 </NAME>
        <MANUFACTURER>
           <![CDATA[Samsung]]>
        </MANUFACTURER>
    </SHOPITEM>
</SHOP>

Я использую следующий код XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="no" 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 match="SHOPITEM[MANUFACTURER = 'Samsung']"/>

</xsl:stylesheet>

Этот код работает, если совпадающий вводне в CDATA, но в приведенном выше примере кода не работает, потому что производитель находится в CDATA.Есть ли какая-нибудь хитрость, чтобы заставить это работать?

1 Ответ

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

Попробуйте:

<xsl:template match="SHOPITEM[normalize-space(MANUFACTURER) = 'Samsung']"/>

P.S. Это не имеет ничего общего с CDATA. Вы получите ту же проблему с вводом:

<SHOP>
    <SHOPITEM>
        <NAME>TEST 1 </NAME>
        <MANUFACTURER>
            Apple
        </MANUFACTURER>
    </SHOPITEM>
    <SHOPITEM>
        <NAME>TEST 2 </NAME>
        <MANUFACTURER>
           Samsung
        </MANUFACTURER>
    </SHOPITEM>
</SHOP>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...