鉴于以下内容,我想提取VarVal1,VarVa5和VarText,其中FixedVals是固定的:)
<TypeA Attr1="VarVal1">
<TypeB Attr2="FixedVal2">
<TypeC Attr3="FixedVal3">
<TypeD Attr4="FixedVal4" Attr5="VarVal5">
VarText
</TypeD>
</TypeC>
</TypeB>
</TypeA>
请注意,对我来说最大的问题是上下文很重要。我想要完整的模式。可能有其他TypeA节点,但我对它们的值不感兴趣,除非它们后跟
<TypeB Attr2="FixedVal2">
<TypeC Attr3="FixedVal3">
<TypeD Attr4="FixedVal4" Attr5="VarVal5">
VarText
</TypeD>
</TypeC>
</TypeB>
换句话说,我感兴趣的是一组三元组,每个三元组的形式为(VarVal1,VarVal5,VarText)
答案 0 :(得分:2)
这些XPath表达式:
//TypeA
[TypeB[@Attr2="FixedVal2"]
/TypeC[@Attr3="FixedVal3"]
/TypeD[@Attr4="FixedVal4"]]
/@Attr1
那些已发布的内容:
//TypeA
/TypeB[@Attr2="FixedVal2"]
/TypeC[@Attr3="FixedVal3"]
/TypeD[@Attr4="FixedVal4"]
/@Attr5
和
//TypeA
/TypeB[@Attr2="FixedVal2"]
/TypeC[@Attr3="FixedVal3"]
/TypeD[@Attr4="FixedVal4"]
您也可以将它们与|
联合集合运算符组合使用。但是,根据宿主语言,您最好选择所需的TypeA
元素(第一个表达式不包括最后/@Attr1
部分),然后查询每个元素以提取剩余的值。
答案 1 :(得分:0)
我认为你需要一些问题(虽然可能是错的)
for VarVal1
//TypeA/@Attr1
for VarVal5
//TypeA
/TypeB[@Attr2="FixedVal2"]
/TypeC[@Attr3="FixedVal3"]
/TypeD[@Attr4="FixedVal4"]
/@Attr5
认为这些应该可以解决问题
编辑 - 错过了VarText!
//TypeA
/TypeB[@Attr2="FixedVal2"]
/TypeC[@Attr3="FixedVal3"]
/TypeD[@Attr4="FixedVal4"]