如何在xpath中使用not function for complex child元素

时间:2014-09-16 06:57:03

标签: xml xslt xpath wso2 xquery

我有下面的消息我希望删除Response_OutputData标记。 我已经使用了xpath而不是函数,但似乎没有函数魔法没有在这个

上工作

我的输入

 <open:reponce xmlns:open="http://www.openuri.org/">
         <env:hjEnvelope xmlns:env="http://hj.mn.mw/Envelope">
            <env:UserId>as</env:UserId>
            <env:Sender>as</env:Sender>
            <env:MessageId>22195544</env:MessageId>
            <env:CorrelationId>1</env:CorrelationId>
            <env:GenTimeStamp>1</env:GenTimeStamp>
            <env:SentTimeStamp>1</env:SentTimeStamp>
            <env:Payload>
               <MOP xmlns="http://hj.mn.mw/MOP" xmlns:ns2="http://www.openuri.org/">
                  <Response>
                     <Result_OutputData>
                        <resultCode>0</resultCode>
                        <reference_ID>90</reference_ID>
                     </Result_OutputData>
                     <Response_OutputData>
                        <SystemName>google</SystemName>
                        <InterfaceName>nip</InterfaceName>
                        <ResultCode>0</ResultCode>
                        <ResultMessage/>
                        <ReferenceID>90</ReferenceID>
                     </Response_OutputData>
                  </Response>
               </MOP>
            </env:Payload>
         </env:hjEnvelope>
      </open:reponce>

我的xpath就像这样

//env:hjEnvelope/*[not(local-name()='Response_OutputData')]

但它没有与上面相同的输出 我的预期输出是

<open:reponce xmlns:open="http://www.openuri.org/">
         <env:hjEnvelope xmlns:env="http://hj.mn.mw/Envelope">
            <env:UserId>as</env:UserId>
            <env:Sender>as</env:Sender>
            <env:MessageId>22195544</env:MessageId>
            <env:CorrelationId>1</env:CorrelationId>
            <env:GenTimeStamp>1</env:GenTimeStamp>
            <env:SentTimeStamp>1</env:SentTimeStamp>
            <env:Payload>
               <MOP xmlns="http://hj.mn.mw/MOP" xmlns:ns2="http://www.openuri.org/">
                  <Response>
                     <Result_OutputData>
                        <resultCode>0</resultCode>
                        <reference_ID>90</reference_ID>
                     </Result_OutputData>
                      </Response>
               </MOP>
            </env:Payload>
         </env:hjEnvelope>
      </open:reponce>

如何使用xpath实现这一点是可能的还是xquery或xslt 任何人澄清这一点 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我们可以为'Response_OutputData'节点定义一些空模板,如下所示:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match ="*[local-name()='Response_OutputData']">
</xsl:template>
</xsl:stylesheet>