#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="*[.='/']" />