Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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将一个元素复制到组中的所有元素_Xslt_Xpath - Fatal编程技术网

如何使用XSLT将一个元素复制到组中的所有元素

如何使用XSLT将一个元素复制到组中的所有元素,xslt,xpath,Xslt,Xpath,我有一个输入xml,使用下面的XSL转换,我可以将deptId作为子元素添加到“Employees”元素,但我想将其作为子元素添加到每个“Employees”元素。我是XSLT新手,我尝试了下面的转换,但没有获得所需的输出 输入XML: <?xml version="1.0" encoding="UTF-8"?> <rootnode> <companyName>ABC</companyName> <deptId>12&l

我有一个输入xml,使用下面的XSL转换,我可以将deptId作为子元素添加到“Employees”元素,但我想将其作为子元素添加到每个“Employees”元素。我是XSLT新手,我尝试了下面的转换,但没有获得所需的输出

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
    <companyName>ABC</companyName>
    <deptId>12</deptId>
    <employee>
       <name>n1</name>
       <empid>e1</empid>
    </employee>
    <employee>
       <name>n2</name>
       <empid>e2</empid>
    </employee>
    <employee>
       <name>n3</name>
       <empid>e3</empid>
    </employee>
</rootnode>

基础知识
12
n1
e1
氮气
e2
n3
e3
XSL转换:

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

 <xsl:template match="/rootnode">
 <xsl:copy>
    <xsl:copy-of select="companyName"/>
     <xsl:copy-of select="deptId"/>

    <employees>
        <xsl:copy-of select="employee"/>
        <xsl:copy-of select="deptId"/>
    </employees>
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

输出xml:

<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
    <companyName>ABC</companyName>
    <deptId>D1</deptId>
    <employees>
        <employee>
            <name>n1</name>
            <empid>e1</empid>
        </employee>
        <employee>
            <name>n2</name>
            <empid>e2</empid>
        </employee>
        <employee>
            <name>n3</name>
            <empid>e3</empid>
        </employee>
       <deptId>D1</deptId>
   </employees>
 </rootnode>

基础知识
D1
n1
e1
氮气
e2
n3
e3
D1
所需输出:

<?xml version="1.0" encoding="UTF-8"?>
 <rootnode>
      <companyName>ABC</companyName>
      <deptId>12</deptId>
      <employees>
          <employee>
             <name>n1</name>
             <empid>e1</empid>
             <deptId>12</deptId>
          </employee>
          <employee>
             <name>n2</name>
             <empid>e2</empid>
             <deptId>12</deptId>
          </employee>
          <employee>
             <name>n3</name>
             <empid>e3</empid>
             <deptId>12</deptId>
          </employee>
     </employees>
</rootnode>   

基础知识
12
n1
e1
12
氮气
e2
12
n3
e3
12

我想将deptId复制到“employees”元素下的所有“employeer”元素,有人能帮我一下吗。

在您的
rootnode
模板匹配中,您可以执行以下操作:

<xsl:template match="rootnode">
    <xsl:copy>
        <xsl:copy-of select="node()[not(self::employee)]"/>
        <employees>
            <xsl:apply-templates select="employee"/>
        </employees>
    </xsl:copy>
</xsl:template>
<xsl:template match="employee">
    <xsl:copy>
        <xsl:copy-of select="node()"/>
        <xsl:copy-of select="preceding-sibling::deptId"/>
    </xsl:copy>
</xsl:template>
也就是说,复制节点及其子节点,并复制前面的同级
deptId

整个样式表如下所示

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

    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>    

    <xsl:template match="rootnode">
        <xsl:copy>
            <xsl:copy-of select="node()[not(self::employee)]"/>
            <employees>
                <xsl:apply-templates select="employee"/>
            </employees>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="employee">
        <xsl:copy>
            <xsl:copy-of select="node()"/>
            <xsl:copy-of select="preceding-sibling::deptId"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>


查看操作。

整个文档中是否始终只有一个
deptId
?是的,只有一个deptId