/ / Добавяне на атрибут към всеки възел с xslt - xml, xpath, xslt-1.0

Добавяне на атрибут към всеки възел с xslt - xml, xpath, xslt - 1.0

Добро утро, Опитвам се да напиша XSLT 1.0 трансформация, за да трансформирам това

<foo>
<document>
<content name="bar1">Bar1</content>
<content name="bar2">Bar2</content>
<content name="bar3">Bar3</content>
...
</document>
</foo>

до това

<foo>
<document>
<content name="bar1" set="top">Bar1</content>
<content name="bar2" set="top">Bar2</content>
<content name="bar3" set="top">Bar3</content>
...
</document>
</foo>

така че опитах тази трансформация XSLT

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

<foo>
<document>
<xsl:template match="/document/*">
<xsl:copy>
<xsl:apply-templates />
<xsl:attribute name="set" select=""top"" />
</xsl:copy>
</xsl:template>
</document>
</foo>

но за съжаление не работи

Опитах да търся много в ръководства за xpath и xslt, но не мога да намеря тази работа, може ли някой да ми помогне?

Отговори:

0 за отговор № 1

Вашият XSLT синтаксис е изключен. Има много начини за това, ето един доста общ начин:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="content">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:attribute name="set">top</xsl:attribute>
<xsl:value-of select="." />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

Първият шаблон е шаблон за идентичност; вторият шаблон съвпада content възли, копира ги, техните атрибути и добавя атрибута set="top" и съдържанието на елемента.