如何用某些属性包装节点?

时间:2018-02-28 06:30:54

标签: xslt

我在文档中使用XML代码:

<root>
 <a id="att_1">
  <a id="att_2"/>
  <a id="att_3">
   <a id="att_4"> 
    <a id="att_5"/>
   </a>
   <a id="att_6"/>
  </a>
 </a>
</root>

我需要out-document,其中带有id="att_6"的节点包含在b节点中:

<root>
 <a id="att_1">
  <a id="att_2"/>
  <a id="att_3">
   <a id="att_4"> 
    <a id="att_5"/>
   </a>
   <b>
    <a id="att_6"/>
   </b>
  </a>
 </a>
</root>

我首先尝试将所有节点从文档中复制到out-doc。其次,我需要用一定的id包装一个节点。这是我的样式表:

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

  <xsl:template match="a">
    <b>
      <xsl:copy>
        <xsl:apply-templates select=".[@id = 'att_6']"/>
      </xsl:copy>
    </b>
  </xsl:template>

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上:

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

<xsl:template match="a[@id='att_6']">
    <b>
        <xsl:copy-of select="."/>
    </b>
</xsl:template>     

您只需要匹配要包装的节点并处理它们,如上所示。 xsl:copy-of执行上下文节点及其所有包含节点的深层副本。

其他所有内容都由身份转换处理。