Php DomNode获取项的值

Php DomNode获取项的值,php,xml,Php,Xml,您好,我是domnode的新手,我正在尝试检查加载ok的xml树中的值。 这是我的代码,但我不明白为什么不工作 private function createCSV($xml, $f) { foreach ($xml->getElementsByTagName('*') as $item) { $hasChild = $item->hasChildNodes() ? true : false; if(!$hasChild)

您好,我是domnode的新手,我正在尝试检查加载ok的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
不会在浏览器中打印任何内容。 我看了文件,但没有发现任何错误

另外,
$item->tagname
也不起作用

更新

使用时:
echo$item->ownerDocument->saveHTML($item)

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

更新


示例xml数据:

文本节点也被视为子节点,但您只迭代元素节点(按标记名获取元素)。正因为如此,你几乎永远不会进入第二种状态

试试这个:

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);

仍然printf只打印出“Value:”您能发布一些示例XML数据吗?似乎对我有用-。我使用trim()避免打印空文本节点(空白)。但是我认为Xpath和normalize-space()将是处理这些情况的更好的方法谢谢你的时间它似乎起作用了是的,我仍然无法理解错误是什么:)在这种类似的情况下,如何打印标签名?为了创建关联数组?