1
我想複製該屬性值並將其作爲元素文本移動並刪除該元素的屬性。注意:它必須匹配元素名稱,因爲我不想刪除其他元素的屬性。XSLT 1.0將屬性值複製爲文本並刪除屬性
輸入:
<a name = "attr" value = "text"/>
預期
<a name = "attr"> text </a>
我想複製該屬性值並將其作爲元素文本移動並刪除該元素的屬性。注意:它必須匹配元素名稱,因爲我不想刪除其他元素的屬性。XSLT 1.0將屬性值複製爲文本並刪除屬性
輸入:
<a name = "attr" value = "text"/>
預期
<a name = "attr"> text </a>
假設這是一個示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a name="attr" value="text" />
</root>
然後這個樣式表將導致所需的輸出:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a">
<xsl:copy>
<xsl:apply-templates select="@*[local-name() != 'value']"/>
<xsl:value-of select="@value" />
</xsl:copy>
</xsl:template>
</xsl:transform>
輸出:
<?xml version="1.0" encoding="UTF-8"?><root>
<a name="attr">text</a>
</root>
默認模板只是複製遞歸。與匹配<a>
元素的第二個模板。它首先應用不屬於value
的屬性的模板,然後複製屬性value
的文本。它必須這樣做,因爲如果屬性值出現在其他屬性之前,則開始標記已經結束以啓動其文本內容,然後其他屬性不能再被複制。
非常感謝。你讓我今天一整天都感覺很好.. –