我对XSL转换有非常基本的了解。 我需要将数组转换为独立元素列表,如下所示:
输入:
<Fields>
<Field>
<Name>One</Name>
<Value>1</Value>
</Field>
<Field>
<Name>Two</Name>
<Value>2</Value>
</Field>
<Field>
<Name>Three</Name>
<Value>3</Value>
</Field>
<Field>
<Name>Four</Name>
<Value>4</Value>
</Field>
</Fields>
期望的输出:
<Fields>
<Field1>
<Name>One</Name>
<Value>1</Value>
</Field1>
<Field2>
<Name>Two</Name>
<Value>2</Value>
</Field2>
<Field3>
<Name>Three</Name>
<Value>3</Value>
</Field3>
<Field4>
<Name>Four</Name>
<Value>4</Value>
</Field4>
</Fields>
可行吗? 感谢任何建议。
答案 0 :(得分:0)
这个问题背后的真正原因是消费者的软件 如果其名称未由静态xml表示,则无法映射字段 节点
我不确定究竟是什么意思,但如果您确定这是您想要的结果,请尝试:
<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:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Field">
<xsl:element name="Field{position()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
来自michael.hor257k的回答非常有效并且完全回答了我原来的问题,但我意识到这种转换的输出更适合我的需求,提供字段名称是唯一的。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<Fields>
<xsl:apply-templates select="Field" />
</Fields>
</xsl:template>
<xsl:template match="Field">
<xsl:element name="{Name}">
<xsl:element name="Value">
<xsl:value-of select="Value" />
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0"?>
<Fields>
<One>
<Value>1</Value>
</One>
<Two>
<Value>2</Value>
</Two>
<Three>
<Value>3</Value>
</Three>
<Four>
<Value>4</Value>
</Four>
</Fields>