Я пытаюсь очистить файл с произвольными именами элементов, который выглядит как:XSLT - Рекурсивный Пустой узел очистки
<root>
<nodeone>
<subnode blah="1" blah2="abc" />
</nodeone>
<nodeone>
<subnode>with other stuff</subnode>
</nodeone>
<nodeone>
<subnode />
</nodeone>
</root>
в файл, который выглядит как:
<root>
<nodeone>
<subnode blah="1" blah2="abc" />
</nodeone>
<nodeone>
<subnode>with other stuff</subnode>
</nodeone>
</root>
Вы можете увидеть что все «nodeone», у которых были пустые дети, исчезли, но сохраняются любые <nodeone>
с внутренним содержимым или непустыми атрибутами.
Моя текущая попытка решения является:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(normalize-space()) and not(@*)]"/>
</xsl:stylesheet>
Это удаляет любые узлы с пустым внутренним содержанием и сохраняет атрибуты, но и удаляет <nodeone />
текст из выходного сигнала, который не является желаемым результатом.
BTW, если вы хотите, чтобы также были удалены элементы без элементов «nodeone» (например, « »), используйте « ' вместо этого. –
Правильно, как я уже говорил, это документ с произвольными узлами в нем. Я не обязательно знаю, что они называются, но если они пустые и не имеют атрибутов содержания, я хочу, чтобы они не были удалены из вывода. Точка, я не могу создать структуру, подобную той, которую вы предоставили, которая выбирает определенные узлы. Имеет ли это смысл? – TRAL
Итак, имя '' всегда nodeone, но '' может иметь другое имя? Я изменил свой ответ выше, чтобы отразить это. –