使用xpath获取复杂值

时间:2010-11-03 19:34:00

标签: xpath

鉴于以下内容,我想提取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)

2 个答案:

答案 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"]