XSLT копирует все узлы, кроме 1 элемента
<events>
<main>
<action>modification</action>
<subAction>weights</subAction>
</main>
</events>
<SeriesSet>
<Series id="Price_0">
<seriesBodies>
<SeriesBody>
<DataSeriesBodyType>Do Not Copy</DataSeriesBodyType>
</SeriesBody>
</SeriesBodies>
</Series>
</SeriesSet>
Как скопировать весь xml и исключить элемент DataSeriesBodyType
2 ответов
вам просто нужно использовать шаблон идентификатора (как вы использовали), а затем использовать шаблон, соответствующий DataSeriesBodyType, который ничего не делает.
код будет такой:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<!-- Identity template : copy all text nodes, elements and attributes -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- When matching DataSeriesBodyType: do nothing -->
<xsl:template match="DataSeriesBodyType" />
</xsl:stylesheet>
Если вы хотите нормализовать вывод для удаления пустых текстовых узлов данных, добавьте в предыдущую таблицу стилей следующий шаблон:
<xsl:template match="text()">
<xsl:value-of select="normalize-space()" />
</xsl:template>
есть также отличная запись на XMLPlease.com об этом вопросы. Он содержит множество примеров исключения элементов, атрибутов, переименования элементов и т. д. так далее.
см. Следующий веб-сайт: http://www.xmlplease.com/xsltidentity