Вы можете использовать схему применения identity transform скопировать все, и переопределение, что для узлов элементов Location
и Salary
, не копируя их, но только обработку своих детей.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- default: copy everything using the identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- override: for Location and Salary elements, just process the children -->
<xsl:template match="Location|Salary">
<xsl:apply-templates select="node()"/>
</xsl:template>
</xsl:stylesheet>
Обновлено для последующего вопроса. Из вашего примера, это немного непонятно, что еще вы на самом деле хотите сделать, но при условии, что в дополнение к выше, вы также хотите:
Для некоторых элементов преобразования атрибутов дочерних элементов. Вы можете сделать это, добавив дополнительное правило переопределения, которое соответствует атрибутам и выводимым элементам.
Для некоторых других элементов удалите атрибуты в целом. Вы можете сделать это аналогично выше, но на этот раз просто используйте пустой шаблон, который ничего не выводит.
Вывести содержимое некоторых элементов с помощью CDATA
sections. Вы можете указать такие элементы с атрибутом cdata-section-elements
xsl:output
.
Пример таблицы стилей демонстрирует все, что:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" media-type="application/xml"
cdata-section-elements="Summary"/>
<!-- default: copy everything using the identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- override: for Location and Salary nodes, just process the children -->
<xsl:template match="Location|Salary">
<xsl:apply-templates select="node()"/>
</xsl:template>
<!-- override: for selected elements, convert attributes to elements -->
<xsl:template match="Jobs/@*|Job/@*">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<!-- override: for selected elements, remove attributes -->
<xsl:template match="DateActive/@*|DateExpires/@*|DateUpdated/@*"/>
</xsl:stylesheet>
Это не достаточно ясно, что вы пытаетесь удалить. Не могли бы вы уточнить? –