我正在尝试使用xslt将简单的xml转换为结构化的xml。
这是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<foo bar="12" baz="34">ONE</foo>
这就是我想要的:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<a>
<a>
<a>bar</a>
<v>12</v>
</a>
<a>
<a>baz</a>
<v>34</v>
</a>
<v>ONE</v>
</foo>
“foo”元素包含两个属性,“bar”和“baz”以及元素“ONE”的值。在转换后的格式中,元素foo将包含属性序列“a”,其将包含属性序列“a”。
属性sequence-of将包含“a”和“v”元素,它们将分别是属性的名称和值。 foo元素的所有属性都包含在属性序列中。 foo的值位于属性序列之后的“v”元素内。 我可以将属性分解为元素,但我不知道如何添加新元素。
答案 0 :(得分:1)
我猜你想要的东西是:
<?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="/*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<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>
应用于您的输入:
<?xml version="1.0" encoding="UTF-8"?>
<foo bar="12" baz="34">ONE</foo>
结果是:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<a>
<a>bar</a>
<v>12</v>
</a>
<a>
<a>baz</a>
<v>34</v>
</a>
<v>ONE</v>
</foo>