0

您好,我是 domnode 的新手,我正在尝试检查加载正常的 xml 树中的值。这是我的代码,但我不明白为什么不起作用。

private function createCSV($xml, $f)
{

    foreach ($xml->getElementsByTagName('*') as $item) 
    {

        $hasChild = $item->hasChildNodes() ? true : false;

        if(!$hasChild)
        {   
            //echo 'Doesn\'t have children';
            echo 'Value: ' . $item->nodeValue;
        }
        else
        {
            //echo 'Has children';
            $this->createCSV($item, $f);
        }
    }

}   

$item->nodeValue不会向浏览器打印任何内容。我阅读了文档,但看不到任何错误。

PS。$item->tagname也不起作用。

更新

当使用这个:echo $item->ownerDocument->saveHTML($item);

我得到了列出的标签,但我没有像 javascript 中的 innerHTML 那样获得内部(标签之间)的数据。

更新

示例 xml 数据: http: //pastebin.com/dkuUUC0Q

4

1 回答 1

0

文本节点也被视为子节点,但您只是在迭代元素节点(获取Elements ByTagName)。因此,您几乎永远不会进入第二种情况。

试试这个:

if(!$xml->hasChildNodes()){
  printf('Value: %s', $xml->nodeValue);
  return;
}    

foreach($xml->childNodes as $item)
  $this->createCSV($item, $f);     

XPath 版本:

$xpath = new DOMXPath($xml);
$text = $xpath->query('//text()[normalize-space()]');
foreach($text as $node)
  printf('Value: %s', $node->nodeValue);
于 2013-10-04T14:12:24.937 回答