这是链接 http://www.w3schools.com/xpath/xpath_examples.asp
所以点击第一个自己尝试,你会看到一段代码。我不知道这部分意味着什么
while (result)
{
document.write(result.childNodes[0].nodeValue);
document.write("<br>");
result=nodes.iterateNext();
}
结果那里应该是最不重要的节点,并且应该没有childNodes。根据W3C标准,第一个节点应表示为节点[1]。所以我开始认为原子值是一个节点,然后对代码做了一些修改。
我更改了xpath表达式和while循环
path="/bookstore/book";
...
// original codes
...
while (result)
{
document.write(result.childNodes[1].childNodes[0].nodeValue);
document.write("<br>");
result=nodes.iterateNext();
}
/* result
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML
*/
似乎运作良好。然后是另一个修改:
path="/bookstore/book";
...
// original codes
...
while (result)
{
// the only change is here **
document.write(result.childNodes[2].childNodes[0].nodeValue);
document.write("<br>");
result=nodes.iterateNext();
}
/* result
blank
*/
现在看起来很奇怪,我期待着一份作者名单,但我在这里的内容是空白的。然后是另一个微小的修改:
document.write(result.childNodes[3].childNodes[0].nodeValue);
/* result
Giada De Laurentiis
J K. Rowling
James McGovern
Erik T. Ray
*/
childNode [1]表示book-title的fisrt childNode,而childNode [3]表示第二个作者?然后我确信childNode [2]应该是 title 的原子值。但是,当我尝试使用childNode [2]显示它并失败时,我不会向您显示更多代码 - 这里已经是一堆代码。那么,任何人都可以向我解释一下吗?
还有一个问题:
请参阅此处的链接http://www.w3schools.com/xpath/xpath_axes.asp
它引入了 xpath轴和位置路径表达式,但在代码中没有给出示例。我很难想象如何使用它,任何人都可以发布一些例子并启发我吗? (我主要使用java)
答案 0 :(得分:1)
您正在混淆DOM模型和XPath模型。在DOM模型中,节点具有childNodes
属性,其中索引以0
开头,childNodes
包含所有类型的节点(元素节点,文本节点,CDATA节节点,注释节点) ,处理指令节点)。 XPath数据模型不同,其路径表达式与DOM子节点不同。 XPath中的位置谓词以1
开头,而不是0
。您的示例使用XPath来处理DOM树中的book
元素,然后使用DOM API更改为寻址子节点。这通常在浏览器环境中完成,因为浏览器实现了W3C DOM,但有时会在DOM树上提供XPath选择。
您必须了解在DOM和带有<foo>bar</foo>
的XPath模型中,foo
元素节点带有子节点,文本节点的内容为bar
。您看到的示例是使用XPath选择元素节点,然后有时使用childNodes集合来寻址文本子节点并提取其DOM nodeValue
属性。至少对于不需要的代码的Mozilla,Opera,Chrome分支而言,您只需访问foo.childNodes[0].nodeValue
而不是foo.textContent
。但所有这些都是DOM而不是XPath。
的树
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
可以有book
个元素节点,其中有9个子节点,第一个(在DOM 0
集合中具有索引childNodes
,在XPath中具有索引1
{{ 1}})是一个带有空格的文本节点,第二个是./child::node()
元素,第三个是带有空格的文本节点,第四个(带有DOM索引title
)是{{1元素。
当然,对于XPath,如果您知道自己只对元素节点感兴趣,则不会选择3
,而是为第二个元素子项选择author
,或者仅为node()[4]
选择*[2]
author元素子节点。