Как получить значение узла с XPath? - PullRequest
0 голосов
/ 18 июля 2011

Как получить значение узла с XPath?

Получить все узлы, цена которых выше 35

/bookstore/book[price>35.00]

Но когда я изменяю> на = для равных, запрос не выполняется. Пожалуйста помоги. Кстати, я использую php, но это не имеет значения, поскольку XPath универсален.

Вот код php и код xml, который я использовал

$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);
    }    

1 Ответ

2 голосов
/ 03 августа 2011
//bookstore/book/price[. ='35.00']

или

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

Хитрость в кавычках. Значения узла являются текстовыми. Однако вы ничего не сравните с 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...