2016-10-08 48 views
2

我是一名初學者,使用XPath並需要完成一項任務,該任務返回XML元素的值,如果另一元素具有屬性類型= X且屬性鏈接與第一個元素的ID匹配。元素有不同的父母(這些父母是彼此的兄弟姐妹)。XPath,其ID與鏈接屬性匹配的元素的返回值以及第二個元素的其他屬性的返回值?

樣品的XML的:

<orders> 
<order orderID="o1"> 
    <shipfrom> 
     <company> 
      <name>XYZ Company</name> 
      <address> 
       <addressline1>Building 1</addressline1> 
       <addressline2>Floor 3</addressline2> 
       <addressline3>Company Street</addressline3> 
       <city>Cork</city> 
       <country>Ireland</country> 
       <postcode>XYZ123</postcode> 
      </address> 
     </company> 
    </shipfrom> 
    <shipto> 
     <person> 
      <firstname>Mary</firstname> 
      <lastname>O'Brien</lastname> 
      <emailaddress>[email protected]</emailaddress> 
     </person> 
     <address> 
      <addressline1>12 House Estate</addressline1> 
      <addressline2>Estate Road</addressline2> 
      <addressline3></addressline3> 
      <city>Dublin</city> 
      <country>Ireland</country> 
      <postcode>D41234</postcode> 
     </address> 
    </shipto> 
    <items> 
     <item itemID="i1"> 
      <description>Blue Biro</description> 
      <quantity>20</quantity> 
      <price>0.10</price> 
      <code>BIROBLU</code> 
     </item> 
     <item itemID="i2"> 
      <description>Black Biro</description> 
      <quantity>20</quantity> 
      <price>0.10</price> 
      <code>BIROBLA</code> 
     </item> 
    </items> 
    <payments> 
     <payment type="cash"> 
      <amount>2.00</amount> 
     </payment> 
     <payment type="cash"> 
      <amount>2.00</amount> 
     </payment> 
    </payments> 
    <history> 
     <status link="i1" type="outofstock"> 
      <date> 
       <day>08</day> 
       <month>10</month> 
       <year>2016</year> 
      </date> 
     </status> 
     <status link="i2" type="dispatched"> 
      <date> 
       <day>08</day> 
       <month>10</month> 
       <year>2016</year> 
      </date> 
     </status> 
    </history> 
</order> 

任務是列出具有特定狀態的所有項目的詳細信息。

目前我有這樣的:

//items[following-sibling::history/status[@type='dispatched']]/item 

但是,它返回的所有項目的順序,即使只有其中一個是上市地位。

我假設我需要創建一個附加條件 - 所以如果屬性類型是'派遣'和鏈接等於itemID,返回的細節。

但我不知道如何做到這一點!任何人都可以協助

回答

1

您可能需要使用項目作爲上下文節點而不是項目,然後您可以使用鏈接將結果限制爲當前的itemID;這應該工作:

//item[../following-sibling::history/status[@type='dispatched']/@[email protected]] 
+1

好(+1),或者因爲'item' -history'順序可能沒有關係,並且因爲'/./'可以減少到'/',所以可以使用這個稍微簡單的XPath:'// item [../../ history/status [@ type ='dispatched']/@ link = @ itemID]' – kjhughes

+0

你是對的,不需要./部分。謝謝。 – Jayvee

+0

它現在工作得很好 - 感謝你們兩位,我學到了一些新東西,並學會了如何使它變得更簡單。 –

相關問題