使用XSLT将标记XML转换为XML
问题描述:
我对XSLT有所了解,并试图在其他XML中转换XML。使用XSLT将标记XML转换为XML
源XML是类似的东西:
<NoticeContent>
<Version> 1.0 </Version>
<Publisher>me</Publisher>
<Specification>1</Specification>
<Instance>1</Instance>
<NewState>10</NewState>
<Info>
<SDTInInfoExtra>
<Name> Client</Name>
<Value> 1 </Value>
</SDTInInfoExtra>
<SDTInInfoExtra>
<Name> LocalId </Name>
<Value>10 </Value>
</SDTInInfoExtra>
</Info>
</NoticeContent>
和预期:
<?xml version="1.0" encoding="UTF-8"?>
<NoticeContent>
<Version></Version>
<Timestamp></Timestamp>
<Publisher></Publisher>
<Instance></Instance>
<NewState></NewState>
<Info>
<Characteristic name="Client" value="1" />
<Characteristic name="LocalId" value="10" />
</Info>
</NoticeContent>
我用下面的XSL尝试:
<?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" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Info">
<xsl:for-each select="SDTInInfoExtra">
<xsl:value-of select="Name" />
<xsl:value-of select="Value" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
问题正试图转换标签,如:
<SDTInInfoExtra>
<Name> LocalId </Name>
<Value>10 </Value>
</SDTInInfoExtra>
到:
<Characteristic name="Client" value="1" />
非常感谢您的帮助!
答
你已经开始用
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
所以剩下很简单:
<xsl:template match="SDTInInfoExtra">
<Characteristic name="{Name}" value="{Value}"/>
</xsl:template>
谢谢!我发现另一个解决方案使用:“属性名称”,但你的更短,更好。 –