同一级别节点内的XM​​L显示节点

时间:2017-09-26 09:34:23

标签: xml xslt

我有这个数量的xml货币字段是这样的..

<?xml version="1.0" encoding="UTF-8"?>
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
 -<GrpHdr>
  <MsgId>XMLV225022016Q2</MsgId>
  <Amount>10000</Amount>
  <Currency>USD</Currency>
 </GrpHdr>
</Document>    

但我想在下面显示它们......

<?xml version="1.0" encoding="UTF-8"?>
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
 -<GrpHdr>
  <MsgId>XMLV225022016Q2</MsgId>
  <Amount Currency="USD">10000</Amount>
 </GrpHdr>
</Document>  

如何实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:0)

请尝试以下XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:t="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" version="1.0">
    <xsl:output method="xml" 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="t:Amount">
        <xsl:copy>
            <xsl:attribute name="{local-name(../t:Currency)}">
                <xsl:value-of select="../t:Currency" />
            </xsl:attribute>
            <xsl:value-of select="." />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="t:Currency" />
</xsl:stylesheet>

这给出了

以下的输出
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
    <GrpHdr>
        <MsgId>XMLV225022016Q2</MsgId>
        <Amount Currency="USD">10000</Amount>
    </GrpHdr>
</Document>