Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将名称/值对XML转换为元素_Xml_Xslt - Fatal编程技术网

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

使用XSLT将名称/值对XML转换为元素,xml,xslt,Xml,Xslt,我有一个由名称/值对组成的XML文件,我需要使用xslt 1的格式,其中每个“名称”都是一个元素名,内容中有值。以下是一个例子: 输入: <Root> <Entities> <Entity EntityName="Client"> <Data Name="ADDR_City">Anytown</Data> <Data Name="ADDR_State">SC</Data>

我有一个由名称/值对组成的XML文件,我需要使用xslt 1的格式,其中每个“名称”都是一个元素名,内容中有值。以下是一个例子:

输入:

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

任何城镇
联合国安全理事会
23904
输出:

<Root>
  <Entities>
    <Client>
      <ADDR_City>Anytown</ADDR_City>
      <ADDR_State>SC</ADDR_State>
      <ADDR_Zip>23904</ADDR_Zip>
    </Client>
  </Entities>
</Root>

任何城镇
联合国安全理事会
23904
客户端的EntityName不一定是唯一可行的方法…我主要关心的是将Data Name=“…字段转换为正确的格式。感谢您的帮助!


<xsl:for-each select="Data">
   <xsl:element Name="{@Name}"><xsl:value-of select="." /></xsl:element>
</xsl:for-each>

编辑:抱歉-我错过了
实体
名称。更新时假设基数为每个多个。我想我还需要指出,如果属性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>

小写字母“n”:
有效,但我有多个实体标记,这只输出第一个下有数据元素的实体标记(有几个是空的)。如何将其更改为输出所有的?