我在本文档的xPath中遇到问题。
当元素C21201的零件号为1111111时,我想获取元素C50603。
如果删除命名空间,它就可以工作。

到目前为止,这是我所拥有的,但是没有名称空间。

   /*[local-name()='Root']
   /*[local-name()='InputMessagePart_1']
   /*[local-name()='EFACT_D97A_ORDERS']
   /*[local-name()='LINLoop1'][C212/C21201='111111']
   /*[local-name()='RFFLoop3']
   /*[local-name()='RFF_6']
   /*[local-name()='C506_6']
   /*[local-name()='C50603']


ns3是:='http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006']

    <ns3:LINLoop1>
    <ns3:LIN>
        <LIN01>2</LIN01>
        <ns3:C212>
            <C21201>22222222</C21201>
            <C21202>VP</C21202>
            <C21204>91</C21204>
        </ns3:C212>
    </ns3:LIN>
    <ns3:QTY_3>
        <ns3:C186_3>
            <C18601>21</C18601>
            <C18602>1</C18602>
            <C18603>PCE</C18603>
        </ns3:C186_3>
    </ns3:QTY_3>
    <ns3:PRILoop1>
        <ns3:PRI>
            <ns3:C509>
                <C50901>AAA</C50901>
                <C50902>xxxxx</C50902>
                <C50903>CT</C50903>
                <C50905>1</C50905>
                <C50906>PCE</C50906>
            </ns3:C509>
        </ns3:PRI>
    </ns3:PRILoop1>
    <ns3:RFFLoop3>
        <ns3:RFF_6>
            <ns3:C506_6>
                <C50601>LI</C50601>
                <C50603>00002</C50603>
            </ns3:C506_6>
        </ns3:RFF_6>
    </ns3:RFFLoop3>
    <ns3:SCCLoop2>
        <ns3:SCC_2>
            <SCC01>1</SCC01>
        </ns3:SCC_2>
        <ns3:QTYLoop4>
            <ns3:QTY_7>
                <ns3:C186_7>
                    <C18601>21</C18601>
                    <C18602>1</C18602>
                    <C18603>PCE</C18603>
                </ns3:C186_7>
            </ns3:QTY_7>
            <ns3:DTM_25>
                <ns3:C507_25>
                    <C50701>2</C50701>
                    <C50702>xxxx</C50702>
                    <C50703>102</C50703>
                </ns3:C507_25>
            </ns3:DTM_25>
        </ns3:QTYLoop4>
    </ns3:SCCLoop2>
</ns3:LINLoop1>

最佳答案

乍看之下,问题似乎出在这个谓词中

[C212/C21201='111111']


C212元素有一个ns3前缀,因此您需要考虑其名称空间,它也是LINLoop1ns3:LIN的下一层。

[*[local-name() = 'LIN']/*[local-name() = 'C212']/C21201='111111']


(如果C21201元素不在命名空间中,则此方法将起作用。我无法通过部分XML来确定您是否发布了这种情况-如果在树的上方有一个xmlns="...",那么您可以我还要在该路径步骤上使用相同的local-name()技巧。)

关于xml - 具有 namespace 的路径定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24762558/

10-11 04:00