Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在XPath中进行多路连接?_Xml_Xpath - Fatal编程技术网

Xml 如何在XPath中进行多路连接?

Xml 如何在XPath中进行多路连接?,xml,xpath,Xml,Xpath,鉴于此XML: <?xml version="1.0" encoding="UTF-8"?> <r> <Rk> <Req>111</Req> <RkNumber>123456</RkNumber> <RkName>John</RkName> </Rk> <Rk> <Req>111</R

鉴于此XML:

<?xml version="1.0" encoding="UTF-8"?>
<r> 
  <Rk> 
    <Req>111</Req>  
    <RkNumber>123456</RkNumber>  
    <RkName>John</RkName> 
  </Rk>  
  <Rk> 
    <Req>111</Req>  
    <RkNumber>9876</RkNumber>  
    <RkName>Joe</RkName> 
  </Rk>  
  <Covg> 
    <Req>111</Req>  
    <RkNumber>123456</RkNumber>  
    <CvgNumber>123</CvgNumber> 
  </Covg>  
  <Covg> 
    <Req>111</Req>  
    <RkNumber>9876</RkNumber>  
    <CvgNumber>321</CvgNumber> 
  </Covg>  
  <Comp> 
    <Req>111</Req>  
    <CvgNumber>123</CvgNumber>  
    <CompTyp>ABC</CompTyp> 
  </Comp>  
  <Comp> 
    <Req>111</Req>  
    <CvgNumber>321</CvgNumber>  
    <CompTyp>DEF</CompTyp> 
  </Comp> 
</r>
但它返回“约翰”和“乔”。我只希望返回“John”。

使用此XPath

//Rk[RkNumber=//Covg[CvgNumber=//Comp[CompTyp='ABC']/CvgNumber]/RkNumber]/RkName
要通过
RkNumber
选择与
Covg
相关联的
RkName
,该编号又通过
CvgNumber
ABC
CompTyp
相关联的

<RkName>John</RkName>
约翰

根据要求。

但请注意,对于许多XPath处理器,这将具有O(n^3)性能—也就是说,如果1Kb文档需要1ms,那么1Mb文档需要10^6秒(约11.6天),10Mb文档需要33年。对,通过谓词或子树选择,例如
/r/X
,而不是
/X
,尝试将@MichaelKay的
n
限制为小于文档中的元素数。
<RkName>John</RkName>