我有下面的XML文檔(我已經清理出不相關的數據)中的一個元素的第一,第二和第三發生:什麼是XPath語法來獲得另一個元素
<?xml version="1.0"?>
<NewOrderNotification xmlns="http://payments.amazon.com/checkout/2008-11-30/">
<ProcessedOrder>
<ShippingServiceLevel>blah</ShippingServiceLevel>
<ProcessedOrderItems>
<ProcessedOrderItem>
<AmazonOrderItemCode>blah</AmazonOrderItemCode>
<Price>
<Amount>0.2</Amount>
<CurrencyCode>GBP</CurrencyCode>
</Price>
<ItemCharges>
<Component>
<Type>Principal</Type>
<Charge>
<Amount>0.2</Amount>
<CurrencyCode>GBP</CurrencyCode>
</Charge>
</Component>
<Component>
<Type>Shipping</Type>
<Charge>
<Amount>0.95</Amount>
<CurrencyCode>GBP</CurrencyCode>
</Charge>
</Component>
<Component>
<Type>PrincipalPromo</Type>
<Charge>
<Amount>0.0</Amount>
<CurrencyCode>GBP</CurrencyCode>
</Charge>
</Component>
<Component>
<Type>ShippingPromo</Type>
<Charge>
<Amount>0.0</Amount>
<CurrencyCode>GBP</CurrencyCode>
</Charge>
</Component>
</ItemCharges>
<ShippingCustomData>null</ShippingCustomData>
</ProcessedOrderItem>
</ProcessedOrderItems>
</ProcessedOrder>
</NewOrderNotification>
我想知道用於獲取5個不同<Amount>
元件內的每個值的XPath語法:
即我怎樣提取每個下面的:
NewOrderNotification - ProcessedOrder - ProcessedOrderItems - ProcessedOrderItem - 價格 - 金額
NewOrderNotification - ProcessedOrder - ProcessedOrderItems - ProcessedOrderItem - ItemCharges - 組分(類型=原理) - 充電 - 金額
NewOrderNotification - ProcessedOrder - ProcessedOrderItems - ProcessedOrderItem - ItemCharges - 組分(類型=船運) - 充電 - 金額
NewOrderNotification - ProcessedOrder - ProcessedOrderItems - ProcessedOrderItem - ItemCharges - 組分(類型= PrincipalPromo) - 充電 - 金額
NewOrderNotification - ProcessedOrder - ProcessedOrderItems - ProcessedOrderItem - ItemCharges - 組分(類型= ShippingPromo) - 充電 - 金額
請注意在根元素的XMLNS。
這是JScript代碼我使用提取的元素:
var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0");
xmlDoc.setProperty("SelectionNamespaces", "xmlns:a='http://payments.amazon.com/checkout/2008-11-30/'");
xmlDoc.loadXML(xml);
var node = xmlDoc.documentElement.selectSingleNode("XPATH_IN_HERE");
return node.text;
我編輯了我的問題以包含我正在使用的那段代碼。也許它是我的代碼,但是我不能讓第一個工作。我還沒有嘗試過其他人。我也嘗試了// a:NewOrderNotification/ProcessedOrder/ProcessedOrderItems/ProcessedOrderItem/Price/Amount – Graham
這可能有所幫助 - 我已經從xml中刪除了xmlns,並從我的代碼中刪除了setProperty行,然後您的答案就起作用。那麼我需要對xpath進行哪些修改才能處理xmlns? – Graham
對不起,我正在使用ruby/Nokogiri,所以有點難以比較,但我也發現它在首先刪除命名空間後工作。使用nokogiri中的命名空間,必須將'xmnls:'附加到每個標記,例如:'// xmlns:Charge [before-sibling :: xmlns:Type =「ShippingPromo」]/xmlns:Amount/text()'等。 –