PHP中的SimpleXML在XML元素中有点字符

7
使用以下xml格式,我们如何在php的XMLReader中访问News.Env元素? $xmlobj->News->Env可以得到Env元素,这是正确的方法。
<?xml version="1.0" encoding="utf-8"?>
<News>
  <News.Env>abc</News.Env>
</News>

你确定你在谈论XMLReader吗?那个语法更像是SimpleXML - Stefan Gehrig
2个回答

19

这是因为在php中,点.是字符串连接符。在您的情况下,它试图连接$xmlobj->News->News(不存在且因此为空)和常量Env(也不存在并被视为字符串。您将获得一个关于此的通知以及适当的错误级别)。

$tmp = 'News.Env';
$xmlobj->News->$tmp;

或者简称

$xmlobj->News->{'News.Env'};

更新:如果您使用SimpleXML(并根据语法执行),它$xmlobj将以News(根)元素“开始”。

$xmlobj->{'News.Env'};

如果$xmlobj是一个SimpleXMLElement(而不是XMLReader),正确的语法应该是$xmlobj->{'News.Env'},因为$xmlobj已经代表了根节点<News> - Stefan Gehrig
是的,我刚意识到。谢谢提示。 - KingCrunch
另一个问题是,如果元素以@开头,{@attributes}无法正常工作 :( - jit
据我所记,XML元素_不能以@开头。 - KingCrunch
明白了...像参数一样在simplexml中显示属性... :) - jit

1

尝试类似这样的东西

$string = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<News>
    <News.Env>abc</News.Env>
</News>
XML;

$xml = simplexml_load_string($string);

print_r($xml->{'News.Env'});

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