2011-07-18 102 views
0

我如何使用XPath节点的值?如何使用XPath获取节点的值?

取得具有高于35

/bookstore/book[price>35.00] 

价格的所有节点但是,当我改变>为平等的=,查询失败。 请帮忙。顺便说一句,我使用PHP,但这应该不重要,因为XPath是通用的。

下面是我用

$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>"; $xml = new SimpleXMLElement($xml); 

    $name = 'Shiny Red'; 
    $nodes = $xml->xpath(sprintf('/bookstore/book[price>35.00]', $name)); 
    if (!empty($nodes)) { 
     printf('At least one building named "%s" found<hr/>', $name); 
    echo "<textarea style=\"width: 400px; height: 300px;\">";print_r($nodes); echo "</textarea>"; 
    } else { 
     printf('No building named "%s" found', $name); 
    }  
+7

很难说没有你的XML的一个样本。 – Oded

+1

在XML示例旁边,您希望返回一个值,您还应该添加示例PHP代码。 – hakre

+0

不是在一个位置进行测试,但你有没有试过'/书店/书/ [数字(价格)= 35.00]'? – Wrikken

回答

2
//bookstore/book/price[. ='35.00'] 

//bookstore/book[price='35.00'] 

的诀窍是在引号中的PHP代码和XML代码。节点值是文本。但是,您不会与'35 .00'匹配任何内容,但这是因为您的XML不包含具有该价格的书籍。匹配'39.95'将工作(测试)。

$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>"; $xml = new SimpleXMLElement($xml); 

    $name = 'Shiny Red'; 
    $nodes = $xml->xpath(sprintf('//bookstore/book/price[. = \'39.95\']', $name)); 
    if (!empty($nodes)) { 
     printf('At least one building named "%s" found<hr/>', $name); 
    echo "<textarea style=\"width: 400px; height: 300px;\">";print_r($nodes); echo "</textarea>"; 
    } else { 
     printf('No building named "%s" found', $name); 
    } 
+0

非常感谢您的回答。在我提供赏金之前,问题是收集尘埃3个星期没有答案。 – desbest

+0

是的。我认为这是因为这种奖励而被踢到顶端。我很困惑,但没有人发布过这个答案。 :) – GolezTrol

+0

如果我想要一个同时查找标题和价格的XPath,该怎么办?我尝试过使用'和'运算符,并且无法使其运行。 – desbest

相关问题