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

#xml #xslt #xslt-1.0

#xml #xslt #xslt-1.0

Вопрос:

Я думаю, что то, что я пытаюсь, довольно просто, но поскольку я довольно новичок в XSLT и пытаюсь / ищу уже около 4 часов, я подумал, что спрошу…

Допустим, у нас есть этот XML, который мы хотим преобразовать:

 <?xml version="1.0" encoding="UTF-8"?>
<node>
    <field1>test</field1>
    <field2>/</field2>
    <field3>test2</field3>
    <field4>/<field4>
</node>
 

Я хочу преобразовать это с помощью XSLT 1.0, чтобы была скопирована вся структура и все значения, за исключением элементов, имеющих значение «/». Должно быть легко, верно?
До сих пор я нашел это, что, я думаю, недалеко от того, что мне нужно, но это еще не работает…

 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

 <xsl:template match="//text()='/'" />

</xsl:transform>
 

Итак, результат, который я ожидаю, таков:

 <?xml version="1.0" encoding="UTF-8"?>
<node>
    <field1>test</field1>
    <field3>test2</field3>
</node>
 

При попытке этого я получаю неопределенную ошибку. Не указано, потому что я использую бесплатные онлайн-инструменты для преобразования.
Любая помощь будет принята с благодарностью!

Спасибо!

Приветствую, Ник

Ответ №1:

//text()='/' недопустимый путь к местоположению.

В любом случае вы хотите удалить элементы, а не текстовые узлы, поэтому вы должны использовать что-то вроде:

 <xsl:template match="*[.='/']" />