从子节点获取父节点并将其重命名

时间:2019-02-12 12:54:31

标签: xslt

我有下面的输入,我写了一些xslt,给我一个具有特定ID的办公室,但是由于我得到了父节点,所以我也得到了标签<e>。我的问题是我不想拥有那个<e>标签。

 <response>
   <offices>
     <e>
      <id>33701</id>
      <name>aa</name>
     </e>
      .....<e></e>

   </offices>
 </response>

  <xsl:template match="*:response/offices">
        <econ:GetOfficesResponse>
            <Office>
                <xsl:for-each select="e/id">
                    <xsl:if test="text() = $office_id">
                        <xsl:copy-of select="parent::node()"/>
                    </xsl:if>
                </xsl:for-each>
            </Office>
        </econ:GetOfficesResponse>
    </xsl:template>
</xsl:stylesheet>

我得到的答复:

<econ:GetOfficesResponse>
   <Office>
      <e>
        <id>33701</id>
        <name>...</name>
  </e>
 </Office>

我想要的答复:

<econ:GetOfficesResponse>
   <Office>
        <id>33701</id>
        <name>...</name>
 </Office>

有人可以帮我吗?使用xslt 2.0的I / m

2 个答案:

答案 0 :(得分:0)

似乎您只需要一个xsl:for-each即可代替您的<xsl:copy-of select="e[id = $office_id]/*"/>

答案 1 :(得分:0)

尝试此代码:

<xsl:template match="*:response/offices"> <econ:GetOfficesResponse> <Office> <xsl:for-each select="e/id"> <xsl:if test="text() = $office_id"> <xsl:copy-of select="parent::node()/child::node()"/> </xsl:if> </xsl:for-each> </Office> </econ:GetOfficesResponse> </xsl:template>