Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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文档中的名称列表重命名节点_Xslt_Rename_Nodes - Fatal编程技术网

Xslt 从同一XML文档中的名称列表重命名节点

Xslt 从同一XML文档中的名称列表重命名节点,xslt,rename,nodes,Xslt,Rename,Nodes,我有以下XML: <?xml version="1.0" encoding="UTF-8"?> <Data> <Set> <Tables> <Table> <Tablehead> <C>Name</C> <C>FirstName</C> <C>Address</C> <C>Zip

我有以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<Data>
  <Set>
<Tables>
  <Table>
    <Tablehead>
      <C>Name</C>
      <C>FirstName</C>
      <C>Address</C>
      <C>Zip</C>
      <C>City</C>
      <C>State</C>
    </Tablehead>
    <Rows>
      <Person>
        <C>Miller</C>
        <C>John</C>
        <C>Squires Circle</C>
        <C>88034</C>
        <C>Boulder</C>
        <C>Colorado</C>
      </Person>
    </Rows>
  </Table>
    </Tables>
  </Set>
</Data>

名称
名字
地址
拉链
城市
陈述
米勒
约翰
乡绅圈
88034
巨石
科罗拉多州
元素person可以出现n次。现在,为了正确使用该结构,我必须首先在
中重命名
标记。 我提出了以下XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="Rows"> 
    <Rows>     
        <xsl:apply-templates select="Person"/>
    </Rows>
</xsl:template>

<xsl:template match="Person">
     <Person>
         <xsl:apply-templates select="C"/>                    
     </Person>   
</xsl:template>

<xsl:template match="/Data/Set/Tables/Table/Rows/Person/C">
    <xsl:variable name="nodePosition" select="position()" />
        <xsl:value-of select="parent::*/parent::*/parent::*/Tablehead/C[$nodePosition]"/>
</xsl:template>

但输出总是这样:

<?xml version="1.0" encoding="UTF-8"?>
<Data>
  <Set>
  <Tables>
  <Table>
    <Tablehead>
      <C>Name</C>
      <C>FirstName</C>
      <C>Address</C>
      <C>Zip</C>
      <C>City</C>
      <C>State</C>
    </Tablehead>
    <Rows>
      <Person/>
    </Rows>
  </Table>
  </Tables>
  </Set>
</Data>

名称
名字
地址
拉链
城市
陈述
它看起来不错,但我的
元素总是空的。我错过了什么?我一直在尝试,但我无法让它工作。我很高兴收到你方的任何意见。 谢谢你,并致以最良好的祝愿,
Peter

以下样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="Person/C">
    <xsl:variable name="index">
      <xsl:number/>
    </xsl:variable>
    <xsl:element name="{../../../Tablehead/C[position() = $index]}">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

当应用于输入时

<?xml version="1.0" encoding="UTF-8"?>
<Data>
  <Set>
<Tables>
  <Table>
    <Tablehead>
      <C>Name</C>
      <C>FirstName</C>
      <C>Address</C>
      <C>Zip</C>
      <C>City</C>
      <C>State</C>
    </Tablehead>
    <Rows>
      <Person>
        <C>Miller</C>
        <C>John</C>
        <C>Squires Circle</C>
        <C>88034</C>
        <C>Boulder</C>
        <C>Colorado</C>
      </Person>
    </Rows>
  </Table>
    </Tables>
  </Set>
</Data>

名称
名字
地址
拉链
城市
陈述
米勒
约翰
乡绅圈
88034
巨石
科罗拉多州
输出

<?xml version="1.0" encoding="UTF-8"?><Data>
  <Set>
<Tables>
  <Table>
    <Tablehead>
      <C>Name</C>
      <C>FirstName</C>
      <C>Address</C>
      <C>Zip</C>
      <C>City</C>
      <C>State</C>
    </Tablehead>
    <Rows>
      <Person>
        <Name>Miller</Name>
        <FirstName>John</FirstName>
        <Address>Squires Circle</Address>
        <Zip>88034</Zip>
        <City>Boulder</City>
        <State>Colorado</State>
      </Person>
    </Rows>
  </Table>
    </Tables>
  </Set>
</Data>

名称
名字
地址
拉链
城市
陈述
米勒
约翰
乡绅圈
88034
巨石
科罗拉多州

希望这会有所帮助。

您的XML没有任何
元素,但您的XSLT代码编写时就好像它有一样。请准确解释您希望输出的样子。您好mzjn,对此表示抱歉。我现在更正了XSLT以匹配-tags。谢谢Martin,您的解决方案非常有效。很抱歉,我的XML/XSLT中的C和A不匹配。我还尝试了一个更大的文件,以及它的工作。谢谢你的帮助,看起来很容易。我会尽力去理解它。向你问好,彼得