如何从xml获取子属性的值,并使用xslt将相同的属性添加到父节点?

时间:2016-11-28 06:58:50

标签: xml xslt xslt-2.0

我对Xslt很新,我想转换一个xml哪个子节点有一个属性我想把它放在父节点上。到目前为止,我尝试在变量中读取属性值存储但是它似乎没有作为变量范围的帮助无效

XML示例:

<Parent>
 <CHILD_1>
      <SUBCHILD ATTR="345">
      <element1>10</element1>
      </SUBCHILD >
    <CHILD_1>
</Parent>

我想将属性attr作为父级的属性,并将其从child_1中删除。

我尝试了什么:

   <xsl:template match="Parent">
      <xsl:copy>
      <xsl:attribute name="ATTR" select="CHILD_1/SUBCHILD /@ATTR"/>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
     </xsl:template>

这是在父节点上添加属性但不从子

中删除属性

对此有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

将此添加到要删除的属性可以解决问题

<xsl:template match="@ATTR"/>

答案 1 :(得分:0)

您需要专门遍历节点元素和地址属性。这将消除递归模板添加的属性

为您演示:http://xsltransform.net/ejivdHb/20

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://locomotive/bypass/docx" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="node()">
    <xsl:copy>
        <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="CHILD_1">
    <xsl:copy>
       <xsl:attribute name="role" select="SUBCHILD/@ATTR"/>
       <xsl:apply-templates select="node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>