PHP DOM:按标签名获取元素

5

我担心这是一个非常愚蠢的问题,但是在尝试了许多组合后,我已经卡住了两个小时。我正在尝试从XML文件中提取名称。

我的XML文件:

<?xml version="1.0"?>
<userdata>
<name>John</name>
</userdata>

我的PHP:

  $doc          =  new DOMDocument();
  $doc          -> load( "thefile.xml" );
  $thename       =  $doc -> getElementsByTagName( "name" );
$myname= $thename -> getElementsByTagName("name") -> item(0) -> nodeValue;

错误信息:

Catchable fatal error: Object of class DOMElement could not be converted to string in phpreader.php

我已经尝试过

$myname= $thename -> getElementsByTagName("name") -> item(0) ;
$myname= $doc     -> getElementsByTagName("name") -> item(0) -> nodeValue;
$myname= $doc     -> getElementsByTagName("name") -> item(0) ;

但是所有尝试都失败了。猜测我已经尝试了几乎每一种组合,除了正确的那个 :(
2个回答

8
你可能需要 $myname = $names->item(0)->nodeValue。$names 已经是所有标签为“name”的节点的 NodeList,你需要这些节点中的第一个项目 (->item(0)) 并且你需要节点的值 (->nodeValue)。$thename 更适合被命名为 $names,你可以看到为什么 $names->item(0)->nodeValue 在语义上是有意义的。
这对我来说有效。

好的,谢谢Federico。感谢您对此问题的清晰解释和修复。我过去5个月一直在使用PHP DOM,但我发现很难记住。我只是偶尔使用它,所以我往往会忘记语义:(而且我必须坚持使用它...正如其他人所说,我应该使用simpleXML。我在其他地方使用它,它更容易!但是在某些部分,我被困在旧的遗留PHP DOM中。再次感谢!:) - Morph

3

这段代码运行:

<?php
$xml = <<<XML
<?xml version="1.0"?>
<userdata>
    <name>John</name>
</userdata>
XML;

$doc = new DOMDocument();
$doc->loadXML($xml);
$names = $doc->firstChild->getElementsByTagName("name");
$myname = $names->item(0)->nodeValue;

var_dump($myname);

嗨 Dylan。那段代码对我也起作用了,除了Federicos的代码之外...不过基于他先回答,我接受了他的答案。但是我会把你的代码作为一个可行的“玩具”示例保留下来,以备将来参考 - 它非常有用!谢谢 :) - Morph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接