我有一个XML文件,包含名称/值对,我需要使用xslt 1格式,其中每个“Name”是一个元素名称,其内容中包含Value。这是一个例子:
输入:
<Root>
<Entities>
<Entity EntityName="Client">
<Data Name="ADDR_City">Anytown</Data>
<Data Name="ADDR_State">SC</Data>
<Data Name="ADDR_Zip">23904</Data>
</Entity>
</Entities>
</Root>
输出:
<Root>
<Entities>
<Client>
<ADDR_City>Anytown</ADDR_City>
<ADDR_State>SC</ADDR_State>
<ADDR_Zip>23904</ADDR_Zip>
</Client>
</Entities>
</Root>
客户端的EntityName不一定是唯一可行的方式......我主要关心的是将Data Name =“...字段设置为正确的格式。感谢您的帮助!
答案 0 :(得分:2)
<xsl:for-each select="Data">
<xsl:element Name="{@Name}"><xsl:value-of select="." /></xsl:element>
</xsl:for-each>
答案 1 :(得分:1)
编辑:道歉 - 我错过了Entity
名称。假设基数为<Entity> per <Entities>
,则更新。我想我还需要指出,如果属性EntityName或Name包含无效的元素字符(例如空格),或者如果属性完全丢失,这将失败。
<?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="/Root">
<Root>
<xsl:for-each select="Entities">
<Entities>
<xsl:for-each select="Entity">
<xsl:element name="{@EntityName}">
<xsl:for-each select="Data">
<xsl:element name="{@Name}">
<xsl:value-of select="./text()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</Entities>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>