2013-03-13 84 views
2

我不明白为什么我不能引用XML属性'headendId'。我已经参考了几篇文章,我的语法似乎很好?有人能解释我做错了什么吗?提前致谢。使用XMLReader和PHP获取XML属性

<?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()方法来获取头端headendId属性的字符串值。