3

私は Xpath に非常に慣れていません。その概念は長年のプログラマーにとっては単純ですが、関数の構文については少し混乱しています....どんな助けにも感謝します。

xml ファイルがあるとします (簡単にするために、これは southwind.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関数のいずれかを使用するためのパス(正しい構文とは)をどのように構築しますか...ノード選択の基本は理解していますが、関数を使用するための構文は何ですか..

たとえば、注文のすべての数量の SUM が必要だったとしましょう。 私はこれを試しましたが、それが非常に間違っていることを知っています..

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

前もって感謝します

4

3 に答える 3

2

まず、XML にはルート ノードを閉じるタグが必要です。( </Orders>)

XPath sum 関数を使用するこの JavaScript コードは、Firefox で動作し、XML 内のすべての Quantity タグの合計である 76 を返します。私はそれが役立つことを願っています:

<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 関数を見つけることができます。シンタキシスの良い例がここにあります

于 2012-11-26T10:01:34.703 に答える
1

フォローアップするだけです...JavascriptでXpathを使用している場合、それはすべてそのXpathResultに帰着するということは完全に理にかなっています...したがって、他の誰かがそれを持っている場合に備えて、以前のフォローアップの質問に答えるこのサイトを見つけました...ありがとう http://help.dottoro.com/ljagksjc.php

于 2012-11-26T15:29:25.007 に答える
1

document.selectNodes(IE) またはdocument.evaluate(Chrome、Firefox、Opera、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();
}
于 2012-11-26T09:46:01.537 に答える