我有一个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
其是递减运算符或--
。
如何引用此对象的属性?
您使用大括号的方法并没有太大错误,但需要在大括号之间加一个字符串:
var_dump($child->{'item--1'});
来自SimpleXMLElement
对象的手册页面:
警告任何试图使用包含连字符的密钥名称解析XML的人(即)
<subscribe>
<callback-url>example url</callback-url>
</subscribe>
为了访问回调url,您需要执行以下操作:
<?php
$xml = simplexml_load_string($input);
$callback = $xml->{"callback-url"};
?>
如果您尝试在不使用大括号和引号的情况下执行此操作,您会发现返回的是0,而不是您想要的。