代码之家  ›  专栏  ›  技术社区  ›  Avi

使用xpath获取复杂值

  •  0
  • Avi  · 技术社区  · 15 年前

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

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

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

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   user357812 user357812    15 年前

    这些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

        2
  •  0
  •   Jim Jeffries    15 年前

    我想你需要几个问题(可能是错的)

    对于VarVal1

    //TypeA/@Attr1
    

    对于VarVal5

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

    编辑-错过VarText!

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