Добро утро, Опитвам се да напиша 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"
и съдържанието на елемента.