2010-05-24 4 views
1

Я пытаюсь проанализировать XML-файл, чтобы возвращать элемент только с определенным идентификатором, но с проблемой , заставляя его работать.Разбор xml с php и xpath

вот что я имею в PHP

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath('//library/book[@id=1]'); 

foreach($nodes as $node) { 
echo $node['title'].'<br/>'; 
} 

Во-первых, РНР ничего из файла XML не возвращаются.

Что мне нужно исправить, чтобы вернуть данные?

Кроме того, как я могу ввести $ albid в xpath, чтобы идентификатор был получен из ссылки?

Любые указатели в правильном направлении будут оценены.

Спасибо!

--и вот образец XML file--

<library> 
<book id="1"> 
    <title>PHP and MySQL</title> 
    <author fname="miguel" lname="alvarez">Miguel Alvarez</author> 
</book> 
<book id="2"> 
    <title>JAVA 123</title> 
    <author fname="william" lname="vega">WIlliam Vega</author> 
</book> 

+0

Не забудьте закрыть. – allnightgrocery

ответ

3

Во-первых, вы должны закрыть <library> тег, в противном случае XML имеет неверный формат и синтаксический анализ потерпит неудачу.

SimpleXMLElement :: XPath() возвращает объект (ref), так что внутри цикла сделать: echo $node->title.'<br/>';

Getting $ albid в строку .. хорошо, использование конкатенации: $nodes = $xml->xpath('//library/book[@id='.$albid.']');

+0

Большое спасибо за объяснение того, как/почему менять код. Отлично работает! –

2

Попробуйте это,

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath("//library/book[@id=$albid]"); 

foreach($nodes as $node) { 
    echo $node->title.'<br/>'; 
} 
+0

смешно, как это всегда маленький фрагмент кода, который делает трюк. Я получил его для работы сверху, но спасибо за альтернативный способ использования xpath –