Javascript 关于w3school提供的XPath教程的问题
这里是链接 因此,单击第一个自己尝试一下,您将看到一段代码。我不知道这部分是什么意思Javascript 关于w3school提供的XPath教程的问题,javascript,xml,xpath,Javascript,Xml,Xpath,这里是链接 因此,单击第一个自己尝试一下,您将看到一段代码。我不知道这部分是什么意思 while (result) { document.write(result.childNodes[0].nodeValue); document.write("<br>"); result=nodes.iterateNext(); } childNode[1]表示书名的第一个childNode,childNode[3]表示第二作者?然后我确信childNode[2]应该
while (result)
{
document.write(result.childNodes[0].nodeValue);
document.write("<br>");
result=nodes.iterateNext();
}
childNode[1]表示书名的第一个childNode,childNode[3]表示第二作者?然后我确信childNode[2]应该是title的原子值。但是当我尝试使用childNode[2]显示它时失败了,我不会再显示更多的代码——这里已经有很多代码了。那么,有人能给我解释一下吗
还有一个问题:
请参阅此处的链接
它引入了xpath轴和位置路径表达式,但代码中没有给出示例。我几乎无法想象如何使用它,谁能举一些例子来启发我?(我主要使用java)您混淆了DOM模型和XPath模型。在DOM模型中,节点有一个
childNodes
属性,其中索引以0
开头,childNodes
包含所有类型的节点(元素节点、文本节点、CDATA节节点、注释节点、处理指令节点)。XPath数据模型不同,其路径表达式也不同于DOM子节点。XPath中的位置谓词以1
开头,而不是以0
开头。您的示例使用XPath来寻址DOM树中的book
元素,然后使用DOM API更改为寻址子节点。这通常是在浏览器环境中完成的,因为浏览器实现了W3CDOM,但有时在DOM树上提供XPath选择
您必须了解,在DOM和带有bar
的XPath模型中,都有带有子节点的foo
元素节点,一个带有contentsbar
的文本节点。您看到的示例是使用XPath选择元素节点,然后有时使用childNodes集合来寻址文本子节点并提取其DOMnodeValue
属性。至少对于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>
日常意大利语
吉娅达·德·劳伦蒂斯
2005
30
可以有一个book
元素节点,该节点有9个子节点,第一个(在DOMchildNodes
集合中具有索引0
,在XPath/child::node()
中具有索引1
)是带空格的文本节点,第二个是title
元素,第三个是带空格的文本节点,第四个(DOM索引为3
)是author
元素
当然,对于XPath,如果您知道您只对元素节点感兴趣,那么您不会选择
node()[4]
,而是会选择*[2]
作为第二个元素子节点,或者干脆选择author
作为author元素子节点。对于记录,它充满了错误信息,我建议学习时不要访问他们的网站。这看起来像JavaScript,与Java不同。@yshavit我知道它是JavaScript,我的意思是希望有人能用Java解决我的第二个问题。我还没有开始使用DOM模型,但为什么result.childNodes[2].childNodes[0].nodeValue)
不提供作者,而结果.childNodes[3].childNodes[0].nodeValue)
do?我是否可以认为将xpath和DOM结合在一起应该是解析XML的有效方法?根据解析器的不同,元素节点之间有空白缩进的XML文档可能在元素节点之间的childNodes
集合中有文本节点。这可能会导致元素节点的索引不同于某些人的预期。
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
*/
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>