如何编写xpath来考虑两个或多个元素的值

时间:2017-09-21 10:59:39

标签: xml xpath

我正在尝试编写一个xpath来获取OrderLinesProducts ActivationStatus 完成level" 2&# 34 ;. 我尝试使用这个xpath://*[[text()="2"] and [text()[contains(.,"ReadyForActivation")]]]但它不起作用

这是xml文件



<InputOrder>
  <Order> 
	<OrderType>Change</OrderType> 
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Email>          
          <ProductLine>Email</ProductLine>
          <ProductName>Email Service</ProductName>
          <ProductLevel>2</ProductLevel>
          <ProductType>EMAIL</ProductType>
          <ProductOperation>NoChange</ProductOperation>
        </Email>
      </Product>
      <Asset>        
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Email>          
          <ProductLine>Email</ProductLine>
          <ProductName>Email</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>EMAIL</ProductType>
          <ProductOperation>NoChange</ProductOperation>          
        </Email>
      </Product>
      <Asset>        
        <ActivationStatus>ReadyForActivation</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Access>
          <ProductLine>Access</ProductLine>
          <ProductName>Internet Access Service</ProductName>
          <ProductLevel>2</ProductLevel>
          <ProductType>INTERNETACCESS</ProductType>
          <ProductOperation>NoChange</ProductOperation>          
        </Access>
      </Product>
      <Asset>
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
	<OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Itv>          
          <ProductLine>TV</ProductLine>
          <ProductName>Ethernet switch</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>LITVADDITIONAL</ProductType>
          <ProductOperation>NoChange</ProductOperation>          
        </Itv>
      </Product>
      <Asset>
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>      
      <Product>
        <Internet>          
          <ProductLine>Internet</ProductLine>
          <ProductName>IC31</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>INTERNET</ProductType>
          <ProductOperation>Add</ProductOperation>         
        </Internet>
      </Product>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Internet>         
          <ProductLine>Internet</ProductLine>
          <ProductName>IC01</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>INTERNET</ProductType>
          <ProductOperation>Delete</ProductOperation>          
        </Internet>
      </Product>
      <Asset>
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Itv>          
          <ProductLine>TV</ProductLine>
          <ProductName>Sport1 pakket</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>TVCHANNEL</ProductType>
          <ProductOperation>Add</ProductOperation>          
        </Itv>
      </Product>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Itv>
          <ProductLine>TV</ProductLine>
          <ProductName>Digitale tv-ontvanger met harddiskrecorder</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>TV</ProductType>
          <ProductOperation>Delete</ProductOperation>
        </Itv>
      </Product>
      <Asset>
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Itv>
          <ProductLine>TV</ProductLine>
          <ProductName>Digitale tv-ontvanger</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>TV</ProductType>
          <ProductOperation>Delete</ProductOperation>          
        </Itv>
      </Product>
      <Asset>
        <ActivationStatus>Complete</ActivationStatus>
        <AssetStatus>Active</AssetStatus>
      </Asset>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>      
      <Product>
        <Engineer>          
          <ProductLine>Engineer</ProductLine>
          <ProductName>Omruilen NT</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>ACCESSENGINEER</ProductType>
          <ProductOperation>Add</ProductOperation>         
        </Engineer>
      </Product>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <OrderLine>
      <ServiceId>100001</ServiceId>
      <Product>
        <Engineer>
          <ProductLine>Engineer</ProductLine>
          <ProductName>Omruilen modem</ProductName>
          <ProductLevel>3</ProductLevel>
          <ProductType>ACCESSENGINEER</ProductType>
          <ProductOperation>Add</ProductOperation>          
        </Engineer>
      </Product>
      <OrderLineStatus>Open</OrderLineStatus>
    </OrderLine>
    <HardwareAlreadyDelivered>false</HardwareAlreadyDelivered>   
    <Leadtime>12</Leadtime>
    <DirectTerminationMailandUser>false</DirectTerminationMailandUser>    
    <SuppressCommunication>false</SuppressCommunication>
  </Order>
</InputOrder>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

xpath 表达式:

//OrderLine[.//ProductLevel=2 and .//ActivationStatus='Complete']

答案 1 :(得分:0)

如果您想要满足这两个条件的实际OrderLine元素,可以使用:

//OrderLine[Asset/ActivationStatus = 'Complete' and Product/Access/ProductLevel = '2']

如果您希望产品元素符合条件,请尝试以下方法:

//OrderLine[Asset/ActivationStatus = 'Complete' and Product/Access/ProductLevel = '2']/Product
相关问题