2012-11-26 54 views
3

我對Xpath很新,雖然它的概念對於長時間的程序員來說很簡單,但我對函數的語法有點困惑......任何幫助表示讚賞。xpath函數語法javascript

讓我們說你有(爲簡單起見,這是從southwind.xml部分)的XML文件

<Orders> 
    <Order OrderID="10248"> 
     <CustomerID>VINET</CustomerID> 
     <EmployeeID>5</EmployeeID> 
     <OrderDate>1996-07-04T14:25:55</OrderDate> 
     <RequiredDate>1996-08-01T06:43:44</RequiredDate> 
     <ShippedDate>1996-07-16T04:00:12</ShippedDate> 
     <ShipVia>3</ShipVia> 
     <Freight>32.3800</Freight> 
     <ShipName>Vins et alcools Chevalier</ShipName> 
     <ShipAddress>59 rue de l'Abbaye</ShipAddress> 
     <ShipCity>Reims</ShipCity> 
     <ShipRegion/> 
     <ShipPostalCode>51100</ShipPostalCode> 
     <ShipCountry>France</ShipCountry> 
     <OrderDetails> 
      <OrderDetail> 
       <ProductID>11</ProductID> 
       <UnitPrice>14.0000</UnitPrice> 
       <Quantity>12</Quantity> 
       <Discount>0</Discount> 
      </OrderDetail> 
      <OrderDetail> 
       <ProductID>42</ProductID> 
       <UnitPrice>9.8000</UnitPrice> 
       <Quantity>10</Quantity> 
       <Discount>0</Discount> 
      </OrderDetail> 
      <OrderDetail> 
       <ProductID>72</ProductID> 
       <UnitPrice>34.8000</UnitPrice> 
       <Quantity>5</Quantity> 
       <Discount>0</Discount> 
      </OrderDetail> 
     </OrderDetails> 
    </Order> 
    <Order OrderID="10249"> 
     <CustomerID>TOMSP</CustomerID> 
     <EmployeeID>6</EmployeeID> 
     <OrderDate>1996-07-05T06:39:18</OrderDate> 
     <RequiredDate>1996-08-16T03:39:38</RequiredDate> 
     <ShippedDate>1996-07-10T14:39:39</ShippedDate> 
     <ShipVia>1</ShipVia> 
     <Freight>11.6100</Freight> 
     <ShipName>Toms Spezialitäten</ShipName> 
     <ShipAddress>Luisenstr. 48</ShipAddress> 
     <ShipCity>Münster</ShipCity> 
     <ShipRegion/> 
     <ShipPostalCode>44087</ShipPostalCode> 
     <ShipCountry>Germany</ShipCountry> 
     <OrderDetails> 
      <OrderDetail> 
       <ProductID>14</ProductID> 
       <UnitPrice>18.6000</UnitPrice> 
       <Quantity>9</Quantity> 
       <Discount>0</Discount> 
      </OrderDetail> 
      <OrderDetail> 
       <ProductID>51</ProductID> 
       <UnitPrice>42.4000</UnitPrice> 
       <Quantity>40</Quantity> 
       <Discount>0</Discount> 
      </OrderDetail> 
     </OrderDetails> 
    </Order> 

在Javascript我怎麼構建的路徑(什麼是正確的語法)使用任何xpath函數...我瞭解選擇節點的基礎知識,但是什麼是usting函數的語法..

例如,讓我們說我想SUM的所有訂單數量...這是我得到的地方卡住了,如果我下站在一個函數的語法,其餘的將很容易得到! 什麼會的路徑是我嘗試這樣做,我知道這是非常錯誤..

path="/Orders/Order/OrderDetails/OrderDetail[sum(quantity)]"; 

預先感謝您

+0

您正在使用哪個XPath庫? – sphair

回答

1

使用document.selectNodes(IE)或document.evaluate器(Chrome,Firefox,歌劇,Safari瀏覽器) 功能。你會在這裏找到使用它們的方法:http://www.w3schools.com/xpath/xpath_examples.asp

Mozilla還提供了一個有用的文檔:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript

以下是如何使用document.evaluate對每篇文章的數量進行求和。

// retrieves xml document 
var xhttp = new XMLHttpRequest(); 
xhttp.open("GET", "southwind.xml", false); 
xhttp.send(""); 
var xml = xhttp.responseXML; 

// evaluates xpath expressions 
var orders = xml.evaluate("//Order", xml, null, XPathResult.ANY_TYPE, null); 
var order = orders.iterateNext(); 
while (order) { 

    var result = xml.evaluate("sum(OrderDetails//Quantity)", order, null, 
    XPathResult.NUMBER_TYPE, null); 
    console.log(result.numberValue); 
    order = orders.iterateNext(); 
} 
+0

感謝你們兩位的回答!這兩種解決方案都有意義並且有效...... – philbeat

+0

另一種想法是;在Xpath中使用的屬性是否有其他編程語言,或者我正在尋找更多的Javascript和xpath嗎?換句話說,屬性.numberValue是你調用的Javascript屬性還是Xpath屬性?例如,如果使用string-length()函數,那麼獲取字符串長度值的屬性是什麼? – philbeat

+1

'numberValue'是W3C DOM XPath API定義的'XPathResult'接口的屬性,請參見http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult- numberValue。您可以在Mozilla,Opera,Chrome等瀏覽器中使用該API,但在Java世界中也有該API的實現,請參閱http://xml.apache.org/xalan-j/apidocs/org/apache/xpath /domapi/package-summary.html。 –

1

首先,您的XML需要標記關閉根節點。 (</Orders>

這段使用XPath sum函數的JavaScript代碼在firefox中工作,它返回76,它是XML中所有數量標籤的總和。我希望它能幫助:

<script> 
var xml=document.implementation.createDocument('', 'doc', null); 
xml.load('books.xml'); 
path='sum(/Orders/Order/OrderDetails/OrderDetail/Quantity)'; 
var result=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 
document.write(result.numberValue); 
</script> 

你可以找到XPath函數here。還有很好的例子sintaxis here

0

只是爲了後續...使總的感覺,如果你正在使用Xpath與JavaScript,這一切歸結爲XpathResult ...所以我發現這個網站,回答我以前的後續問題,以防其他任何有它... 再次感謝 http://help.dottoro.com/ljagksjc.php