2017-09-21 1 views
0

OrderLinesProductType "전자 메일"을 모두 선택해야합니다. 'where'절이 있습니까? 나는 선택을 위해 xpath를 사용해야한다.xpath를 사용하여 동일한 값을 갖는 여러 요소를 선택하는 방법

<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를 특별한 조건으로 검색하십시오. 귀하의 경우이 조건은 내부가 productType이어야하므로 "//ProductType[text()='EMAIL']"입니다. 또한 OrderLine 내부의 상대 xpath로 xml 파일의 어딘가가 아닌 제품 유형을 검색하려면 점 .을 먼저 추가해야합니다.

+0

텍스트가 포함 된 모든 요소가 아니라 'EMAIL'텍스트가 포함 된 첫 번째 요소를 선택하는 데 효과적입니다. –

+0

이 xpath는 조건을 만족하는 모든 요소를 ​​찾습니다. 질문은 그것을 검색하는 데 사용하는 도구입니다. 아마도 "findAll"과 같은 것을 사용해야 할 것입니다. –

0

그냥 대괄호로 조건을 넣어 : 그것은 XPath에있는 조건를 불렀다

/InputOrder/Order/OrderLine[Product/Email/ProductType="EMAIL"] 

이 내 XML 문서입니다. 그것은 WHERE 표현 꽤 비슷

//OrderLine[.//ProductType[text()='EMAIL']] 

:

관련 문제