ホームページ >バックエンド開発 >XML/RSS チュートリアル >クレイジー XML 学習メモ (12)----------XPath
XPath は、XML ドキュメント内の情報を検索するための言語です。 XPath は、XML ドキュメント内の要素と属性間を移動するために使用されます。
XPathはXMLドキュメント内を移動するためにパス式を使用します
これらのパス式は、通常のコンピューターのファイル システムで見られるものと非常に似ています。
XPath標準関数
XPathには100を超える組み込み関数が含まれています。これらの関数は、文字列値、数値、日付と時刻の比較、ノードと QName の処理、シーケンス処理、論理値などに使用されます。
XPath には、要素、属性、テキスト、名前空間、処理命令、コメント、ドキュメント ノード (またはルート ノード) の 7 種類のノードがあります。
XPath用語ノード(ノード)
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
上記 XML ドキュメント内のノードの例:
<bookstore> (文档节点) <author>J K. Rowling</author> (元素节点) lang="en" (属性节点)
基本値 (または原子値、原子値)
基本値は親も子も持たないノードです。
基本値の例:
J K. Rowling "en"
Item は基本的な値またはノードです。
親
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
Children
要素ノードは、0、1 つ、または複数の子を持つことができます。
次の例では、title、author、year、price 要素はすべて book 要素の子です:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
同じ親を持つノード
次の例では、title、author、The year 要素とprice 要素は兄弟です:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
ノードの親、親の親など。
以下の例では、title 要素の祖先は book 要素とbookstore 要素です:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
ノードの子、子の子など。
次の例では、bookstore の子孫は book、title、author、year、price 要素です:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
XML サンプル ドキュメント
次の例では、この XML ドキュメントを使用します。
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>
XPath 軸
軸は、現在のノードを基準にして特定のノードのセットを定義します。
軸名結果ancestor | 現在のノードのすべての先祖(親、祖父など)を選択します | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ancestor-or-self | すべての先祖(親、祖父など)を選択します、現在のノードなど) と現在のノード自体 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attribute | は現在のノードのすべての属性を選択します | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
child | は現在のノードのすべての子要素を選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
descendant | 現在のノードのすべての子孫要素 (子、孫など) を選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
descendant-or-self | 現在のノードと現在のノード自体のすべての子孫要素 (子、孫など) を選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
次 | ドキュメント内の現在のノードの終了タグの後にあるすべてのノードを選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
namespace | 現在のノードのすべての名前空間ノードを選択します | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parent | 現在のノードの親ノードを選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
preceding | ドキュメント内の現在のノードの開始タグの前にあるすべてのノードを選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
preceding-sibling | 現在のノードの前のすべての兄弟ノードを選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self | 現在のノードを選択します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
位置路径表达式位置路径可以是绝对的,也可以是相对的。 绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割: 绝对位置路径:/step/step/... 相对位置路径:step/step/... 每个步均根据当前节点集之中的节点来进行计算。 步(step)包括:
步的语法:轴名称::节点测试[谓语] 实例
XPath 运算符
XPath 表达式可返回节点集、字符串、逻辑值以及数字。 XPath 运算符下面列出了可用在 XPath 表达式中的运算符:
XML实例文档我们将在下面的例子中使用这个 XML 文档: "books.xml" :<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
节点选取我们将使用微软的 XML DOM 对象来载入 XML 文档,并使用 selectNodes() 函数从 XML 文档选取节点: set xmlDoc=CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("books.xml") xmlDoc.selectNodes(路径表达式) 选取所有的 book 节点下面的这个例子选取了 bookstore 元素下所有的 book 节点: xmlDoc.selectNodes("/bookstore/book")
选取第一个 book 节点下面的例子仅选取 bookstore 元素下第一个 book 节点: xmlDoc.selectNodes("/bookstore/book[0]")
选取 price下面的例子从所有的 price 节点选取文本: xmlDoc.selectNodes("/bookstore/book/price/text()")
选取价格高于 35 的 price 价格下面的例子会选取所有价格高于 35 的 price 节点: xmlDoc.selectNodes("/bookstore/book[price>35]/price")
选取价格高于 35 的 title 节点下面的例子会选取所有价格高于 35 的 title 节点: xmlDoc.selectNodes("/bookstore/book[price>35]/title")
以上就是疯狂XML学习笔记(12)------------XPath的内容,更多相关内容请关注PHP中文网(www.php.cn)!
|