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