使用XSLT将名称/值对XML转换为元素

时间:2012-04-03 15:52:24

标签: xml xslt

我有一个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 =“...字段设置为正确的格式。感谢您的帮助!

2 个答案:

答案 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>