используйте xpath для выбора определенного имени - PullRequest
0 голосов
/ 30 сентября 2010

Я следовал за ходом в w3school

http://www.w3schools.com/xpath/xpath_syntax.asp там написано:

имя узла Выбирает все дочерние узлы именованного узла

книжный магазинвсе дочерние узлы элемента книжного магазина

и вот мой код bookstore.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>

файл php:

<?php
$xml = simplexml_load_file("bookstore.xml");
if(!$xml)
{ 
echo 'bad';
}else
{

$res = $xml->xpath("//bookstore");

when I use $res = $xml->xpath("bookstore");
$xml_res1 = $res1->asXML("booklist.xml");
}
?>

он только возвращаетпустой массив.Я хочу выбрать только все элементы <book> (не включая <bookstore> и заголовок <?xml version?>)

в примере w3school, "книжный магазин" может выбрать все дочерние узлы книжного магазинаelement

Кто-нибудь может сказать мне, почему я получил пустой массив?Спасибо

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Используйте :

/*/book

или даже

/*/*

Конечно, вы также можете использовать :

/bookstore/book

или даже

/child::bookstore/child::book

Учитывая предоставленный XML-документ, все вышеприведенные выражения выбирают именно нужные узлы - все элементы book вдокумент.

Всегда старайтесь не использовать сокращение // , так как это может привести к очень неэффективной оценке.

1 голос
/ 30 сентября 2010

Это утверждение должно быть: Выбирает все дочерние узлы с этим именем .

Вот почему он называется именной тест в спецификации 1 2 .

Если вы хотите book элементов:

/bookstore/book
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...