2013-03-13 5 views
2

Я не понимаю, почему я не могу ссылаться на атрибут XML headendId. Я ссылался на несколько сообщений по этому вопросу, и мой синтаксис кажется прекрасным? Может кто-нибудь объяснить, что я делаю неправильно? Заранее спасибо.Получение атрибута XML с помощью XMLReader и PHP

<?php 
$reader = new XMLReader(); 
$reader->open('file.xml'); 

while($reader->read()) 
{ 
    if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'headend') 
{ 
//$reader->read(); 
$headend = (string)$reader->getAttribute('headendId'); 
echo $headend; 
} 
} 

(XML является)

<lineup> 
<headend headendId="something"> 
    <name>some name</name> 
    <ids>ids</ids> 
    <codes>codes</codes> 
</headend> 
</lineup> 

ответ

1

Не перейти к следующему узла с ->read() как только вы нашли его (атрибут не является узлом):

while ($reader->read()) 
{ 
     if ($reader->nodeType === XMLREADER::ELEMENT 
      && $reader->localName === 'headend') 
     { 
       echo $reader->getAttribute('headendId'); 
     } 
} 
+0

Я пробовал это раньше, и снова (см. Править) и до сих пор не получил результата? – user1129107

+0

Я получаю результат с этим кодом без проблем. Что означает ... вы, вероятно, не загружаете правильный XML-файл? – Wrikken

+0

См. Также [этот рабочий код в действии] (http://codepad.org/TZz4eHsS) – Wrikken

2

Он работает аналогично изложенному last time:

require('xmlreader-iterators.php'); // https://gist.github.com/hakre/5147685 

$elements = new XMLElementIterator($reader, 'headend'); 
foreach ($elements as $element) { 
    echo $element->getAttribute('headendId'), "\n"; 
} 

XMLElementIterator позволяет выполнять итерацию только по конкретным элементам, здесь вам нужны элементы headend.

Затем для каждого элемента вы можете вызвать метод getAttribute() для извлечения строкового значения атрибута headendIndendend.

Смежные вопросы