使用XSLT我想转换这个XML:
<exchangeRates>
<rate country="aud">0.97</rate>
</exchangeRates>
进入这个XML:
<xchgRates>
<entry xrate="0.97">aud</entry>
</xchgRates>
编辑:exchangeRates需要成为xchgRates。将xRate更改为xrate以匹配正确的解决方案。
感谢你们的帮助!
答案 0 :(得分:2)
我没试过这个,但是这样的事情应该有效:
<xsl:template match="exchangeRates/rate">
<entry>
<xsl:attribute name="xRate"><xsl:value-of select="." /></xsl:attribute>
<xsl:value-of select="@country" />
</entry>
</xsl:template>
答案 1 :(得分:1)
完整而简短的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="exchangeRates">
<xchgRates>
<xsl:apply-templates select="node()|@*"/>
</xchgRates>
</xsl:template>
<xsl:template match="rate">
<entry xrate="{.}">
<xsl:value-of select="@country"/>
</entry>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<exchangeRates>
<rate country="aud">0.97</rate>
</exchangeRates>
产生了想要的正确结果:
<xchgRates>
<entry xrate="0.97">aud</entry>
</xchgRates>
解释:
使用和覆盖身份规则 / template
使用AVT ( Attribute-Value-Templates ),因为它需要更少的输入,从而产生更短,更易理解和可维护的代码。
几乎所有XSLT指令的属性都有一些例外(特别是select
属性)允许AVT。