如何将XML1转换为XML2?
在进一步的步骤(不是这个问题的一部分)我应该在JSON中转换XML2。 然后,逗号分隔值必须显示为数组:
{111, 222};
{456};
{777,555};
{777,555};
{678};
非常感谢您的努力,托马斯
XML1:
<transaction>
<records type="1" >
<record type="1" >
<field number="1" >
<subfield>
<item>111</item>
<item>222</item>
</subfield>
</field>
<field number="2" >
<subfield>
<item>456</item>
</subfield>
</field>
</record>
</records>
<records type="14" >
<record type="14" >
<field number="1" >
<subfield>
<item>777</item>
<item>555</item>
</subfield>
</field>
<field number="2" >
<subfield>
<item>678</item>
</subfield>
</field>
</record>
</records>
</transaction>
XML 2:
<transaction>
<records type="1" >
<record type="1" >
<field number="1" >111,222</subfield>
</field>
<field number="2" >456</field>
</record>
</records>
<records type="14" >
<record type="14" >
<field number="1" >777,555</field>
<field number="2" >678</field>
</record>
</records>
</transaction>
答案 0 :(得分:2)
首先,找一本关于XSLT的好书并仔细阅读它。有关建议,请参阅Where can I find a good tutorial on XSLT files?。
其次,了解身份模板......
doSomething
有了这个,你就到了中途!您只需要担心转换<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
元素。这意味着您只需添加一个匹配subfield
的模板,该模板会选择subfield
个节点。
item
或者,更好的是,如果您可以使用XSLT 2.0,请执行此操作...
<xsl:template match="subfield">
<xsl:for-each select="item">
<xsl:if test="position() > 1">,</xsl:if>
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
试试这个XSLT
<xsl:template match="subfield">
<xsl:value-of select="item" separator="," />
</xsl:template>
这假设每<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="subfield">
<xsl:value-of select="item" separator="," />
</xsl:template>
</xsl:stylesheet>
subfield
个field
。