Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
使用xpath获取复杂值_Xpath - Fatal编程技术网

使用xpath获取复杂值

使用xpath获取复杂值,xpath,Xpath,鉴于以下情况,我想提取VarVal1、VarVa5和VarText,其中FixedVals是固定的:) 瓦特文 请注意,对我来说最大的问题是上下文很重要。我想要完整的图案。可能还有其他TypeA节点,但我对它们的值不感兴趣,除非后面跟 <TypeB Attr2="FixedVal2"> <TypeC Attr3="FixedVal3"> <TypeD Attr4="FixedVal4" Attr5="VarVa

鉴于以下情况,我想提取VarVal1、VarVa5和VarText,其中FixedVals是固定的:)


瓦特文
请注意,对我来说最大的问题是上下文很重要。我想要完整的图案。可能还有其他TypeA节点,但我对它们的值不感兴趣,除非后面跟

    <TypeB Attr2="FixedVal2">
         <TypeC Attr3="FixedVal3">
             <TypeD Attr4="FixedVal4" Attr5="VarVal5">
                 VarText
             </TypeD>
         </TypeC>
     </TypeB>

瓦特文

换句话说,我感兴趣的是一组三元组,每一个都是(VarVal1,VarVal5,VarText)

我想你需要一些查询(尽管可能是错误的)

为瓦瓦尔1

//TypeA/@Attr1
为瓦瓦尔5

//TypeA
 /TypeB[@Attr2="FixedVal2"]
  /TypeC[@Attr3="FixedVal3"]
   /TypeD[@Attr4="FixedVal4"]
    /@Attr5
我想这些应该能奏效

编辑-丢失的文本

//TypeA
 /TypeB[@Attr2="FixedVal2"]
  /TypeC[@Attr3="FixedVal3"]
   /TypeD[@Attr4="FixedVal4"]

这些XPath表达式:

//TypeA 
 [TypeB[@Attr2="FixedVal2"] 
   /TypeC[@Attr3="FixedVal3"] 
    /TypeD[@Attr4="FixedVal4"]] 
 /@Attr1 
然后那些已经发布的:

//TypeA   
 /TypeB[@Attr2="FixedVal2"]   
  /TypeC[@Attr3="FixedVal3"]   
   /TypeD[@Attr4="FixedVal4"]   
    /@Attr5   


还可以将它们与
|
并集运算符组合。但是,根据宿主语言的不同,您最好选择所需的
TypeA
元素(第一个表达式没有最后一个
/@Attr1
部分),然后查询每个元素以提取剩余的值。

注意
text()
,有时会更好。谢谢,我没有意识到这一点。我将更新我的答案,因为我并没有指定TypeA可能出现在文本的其他地方,我只对TypeB、TypeC后面的那个些实例感兴趣,并使用特定的固定值键入。我会编辑。这是否意味着不是任何
TypeA
元素,而是一个包含
TypeB
TypeC
等的元素?@Alejandro:是的,可能有很多TypeA元素,但我只对那些包含TypeB、TypeC等的元素感兴趣。
TypeB
总是只出现一次吗,
TypeC
在每个
TypeA
中键入的
。是否每个表达式都返回一个包含N个值的列表,(即ValVar1A,ValVar1B,…ValVar1Z,然后是ValVar5A,ValVar5B,…ValVar5Z,然后是VarTextA,VarTextB…VarTextZ和我必须将每个元素中的第n个元素组合成第n个三元组?@Avi:是的,你是对的。
联合集运算符的问题是,在大多数XPath引擎中,节点都会按文档排序。)顺序,但您无法确定某些
TypeA
是否不包含其他一些节点。
//TypeA   
 /TypeB[@Attr2="FixedVal2"]   
  /TypeC[@Attr3="FixedVal3"]   
   /TypeD[@Attr4="FixedVal4"]   
    /@Attr5   
//TypeA   
 /TypeB[@Attr2="FixedVal2"]   
  /TypeC[@Attr3="FixedVal3"]   
   /TypeD[@Attr4="FixedVal4"]