【发布时间】:2014-02-17 15:58:57
【问题描述】:
我的输入 xml 是
<?xml version="1.0" encoding="UTF-8"?>
<foobar atr0="NO" atr2="NO">
<foo atr1="NO" more="more">ONE</foo>
<bar atr6="ATR">
<baz attr="123" attr222="22">TWO</baz>
</bar>
</foobar>
我想要的输出是
<?xml version="1.0" encoding="UTF-8"?>
<foobar>
<foo>
<a>
<a>
<a>atr1</a>
<v>NO</v>
</a>
<a>
<a>more</a>
<v>more</v>
</a>
</a>
<v>ONE</v>
</foo>
<bar>
<baz>
<a>
<a>
<a>attr</a>
<v>123</v>
</a>
<a>
<a>attr222</a>
<v>22</v>
</a>
</a>
<v>TWO</v>
</baz>
<a>
<a>
<a>atr6</a>
<v>ATR</v>
</a>
</a>
</bar>
<a>
<a>
<a>atr0</a>
<v>NO</v>
</a>
<a>
<a>atr2</a>
<v>NO</v>
</a>
</a>
</foobar>
我试图打破每个属性以分隔具有名称和值的独特元素。foobar 元素属性是 foobar 元素子元素的最后一个子元素。父元素的属性将作为最后一个子元素。
我的 xslt 脚本是 -
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()"/>
<v>
<xsl:value-of select="."/>
</v>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<a>
<a>
<xsl:value-of select="name()"/>
</a>
<v>
<xsl:value-of select="."/>
</v>
</a>
</xsl:template>
</xsl:stylesheet>
这适用于 1 个属性。我可以为嵌套元素和属性做什么?
【问题讨论】: