2010-06-27 77 views
1

这是我的一块XML文档:纠正这个XPath表达式请

<?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> 

我有一个生成每个“标题”元素的文本列表的功能。那么,我希望导航到“贴花”并访问其所有子项的每个列表项的onmousedown。到目前为止,我有这个:

//decal[contains(.,\'"+itemName+"\')] 

其中itemName是this.innerHTML传递给函数。它看起来像decal被访问,因为在console.log中,我可以看到长度为1的XMLobject。但我无法弄清楚如何访问“decal”的子项或“title”的兄弟。

感谢您的阅读。

回答

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表达式的其余部分。前两个例子是典型的

+0

这就解释了它。我需要你的最后一个例子。谢谢! – Troy 2010-06-27 23:32:08

0

我觉得

这应该给你一个名为“标题”的子节点的节点贴花包含你可能想//decal[contains(./Title,“木喇叭与蓝色背景”)]文本'蓝色背景木角'

要访问标题元素的同胞,您可以选择返回的节点的子女。 (它实际上返回贴花节点,而不是标题节点。)