3

我有一个带有两个破折号的标签的 xml 文档,如下所示<item--1>:我使用 SimpleXML 来解析这个文档,所以它给了我带有标签名称的对象属性。这显然是一个问题,我猜是因为破折号是变量和属性名称的无效字符。

<?php

$xml = "<data><fruits><item>apple</item><item--1>bananna</item--1></fruits></data>";

$xml = simplexml_load_string($xml);

foreach( $xml->children() as $child ) {
  var_dump($child->item);
#  var_dump($child->item--1);
}

当你运行它时,你会得到

object(SimpleXMLElement)#5 (1) {
  [0]=>
  string(5) "apple"
}

但是,如果取消注释最后一行,即带有两个破折号的 xml 元素,则会出现错误:

PHP Parse error:  syntax error, unexpected T_LNUMBER in test.php on line 17

我尝试使用花括号:

var_dump($child->{item--1});

但这只会给我这个错误:

PHP Parse error:  syntax error, unexpected T_DEC

这是减量运算符,或--

如何引用此对象的属性?

4

2 回答 2

7

您使用花括号的方法并不太错误,但是您需要在大括号之间添加一个字符串:

var_dump($child->{'item--1'});
于 2012-09-06T22:35:43.763 回答
1

手册的对象页面SimpleXMLElement

警告任何尝试使用包含连字符的键名解析 XML 的人 ie。)

<subscribe>
  <callback-url>example url</callback-url>
</subscribe>

为了访问回调 URL,您需要执行以下操作:

<?php
  $xml = simplexml_load_string($input);
  $callback = $xml->{"callback-url"};
?>

如果您尝试在没有大括号和引号的情况下执行此操作,您会发现返回的是 0 而不是您想要的。

于 2012-09-06T22:35:40.810 回答