2017-09-21 13 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'を含む1つの要素(最初の要素)を選択するために機能しましたが、テキストを含むすべての要素に対しては機能しませんでした。 –

+0

このxpathは、条件を満たすすべての要素を見つけます。問題は、それを検索するためにどのツールを使用するかです。おそらく "findAll"などのようなものを使うべきでしょう。 –

0

ちょうど角括弧の中に条件を入れて:それは、XPathで述語と呼ばれています

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

は、これは私のXML文書です。これは、WHERE式とかなり似て

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

関連する問題