在具有相同名称的子节点时删除父节点

时间:2016-04-20 13:45:14

标签: xslt xslt-1.0

我有以下输入xml:

<DST>
   <PQ>
      <hostAddress>10.193.245.27</hostAddress>
   </PQ>
   <AWDSRVRunStoredProcedure xmlns:lxslt="http://xml.apache.org/xslt">
      <hostAddress>10.193.245.27</hostAddress>
      <storedprocedures>storedprocedurestwo</storedprocedures>
   </AWDSRVRunStoredProcedure>
   <DST>
      <test>I want this</test>
      <PQ>
         <hostAddress>10.193.245.27</hostAddress>
      </PQ>
      <AWDSRVRunStoredProcedure xmlns:lxslt="http://xml.apache.org/xslt">
         <hostAddress>10.193.245.27</hostAddress>
         <storedprocedures>storedproceduresone</storedprocedures>
      </AWDSRVRunStoredProcedure>
      <PQClaimSystemRequest>
         <request>request</request>
      </PQClaimSystemRequest>
   </DST>
</DST>

我想删除第一个根节点<DST>,除了第二个<DST>之外,它是子节点。所以,我的结果xml应如下所示。

 <DST>
      <test>I want this</test>
      <PQ>
         <hostAddress>10.193.245.27</hostAddress>
      </PQ>
      <AWDSRVRunStoredProcedure xmlns:lxslt="http://xml.apache.org/xslt">
         <hostAddress>10.193.245.27</hostAddress>
         <storedprocedures>storedproceduresone</storedprocedures>
      </AWDSRVRunStoredProcedure>
      <PQClaimSystemRequest>
         <request>request</request>
      </PQClaimSystemRequest>
   </DST>

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下模板:

<xsl:template match="DST[DST]">
    <xsl:copy-of select="DST"/>
</xsl:template>

或者,如果规则适用于所有元素(不是特定于名为DST的元素):

<xsl:template match="*[*/name()=name()]">
    <xsl:copy-of select="*[name()=current()/name()]"/>
</xsl:template>