2017-09-21 40 views
1

的我想写一个XPath与ActivationStatus完整level“2”,以获取OrderLinesProducts值。 我尝试使用此XPath://*[[text()="2"] and [text()[contains(.,"ReadyForActivation")]]]但它不工作我怎样写一个XPath考虑两个或多个元素

这是xml文件

<InputOrder> 
 
    <Order> 
 
\t <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> 
 
\t <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>

回答

1

的XPath表达式

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

如果你想在那两个条件都满足实际订单行元素,你可以使用这个:

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

如果你想产品的元素在哪里条件满足,试试这个:

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