这是我的XML文档的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<mfVictor>
<decal>
<company>Victor</company>
<title>Wood Horn with Blue Background</title>
<image>
<url>victor01.jpg</url>
<width>60</width>
<height>60</height>
<name>Wood Horn Blue Background</name>
<link></link>
</image>
<price>$15.00</price>
<instock>In Stock</instock>
<notes>none</notes>
</decal>
</mfVictor>
</catalog>
我有一个函数可以生成每个“title”元素的文本列表。那么,我想要导航到“贴花”并访问其所有子节点的每个列表项。到目前为止,我有这个:
//decal[contains(.,\'"+itemName+"\')]
其中itemName是this.innerHTML传递给函数。看起来像是访问了贴花,因为在console.log中我可以看到长度为1的XML对象。但我无法弄清楚如何访问“贴花”的子节点或“标题”的兄弟节点。 / p>
感谢阅读。
答案 0 :(得分:1)
如果您需要根据标题选择贴花,我更喜欢以下xpath:
//decal/title[contains(.,\'"+itemName+"\')]/parent::node()
//decal/title[contains(.,\'"+itemName+"\')]/..
//decal[title[contains(.,\'"+itemName+"\')]]
选择您可以使用的贴花标题的兄弟
//decal/title[contains(.,\'"+itemName+"\')]/following-sibling::*
如果你想要你选择的贴花的所有孩子,你可以使用(也许你需要这个)
//decal[title[contains(.,\'"+itemName+"\')]]/child::*
或更好,如果你有完整的标题
//decal[title[text()=\'"+itemName+"\']]/child::*
使用方括号,您可以指示解析器遍历xml树,以根据您指定的条件进行选择,但不更改上下文节点。将方括号视为橡皮带,一旦包含在其中的测试满足,解析器将恢复到起始节点并评估其余的xpath表达式。前两个例子是一个典型的
答案 1 :(得分:0)
我想你可能想要//decal [包含(./标题,'带有蓝色背景的木角')]
这应该为您提供带有名为“Title”的子节点的贴花节点,该节点包含“带有蓝色背景的Wood Horn”文本
要访问Title元素的兄弟元素,您需要选择返回的节点的 children 。 (它实际上是返回贴花节点,而不是标题节点。)