我试图解析一个包含基本属性的简单xml字符串
<hash>
<engine-type>
I4 DI
</engine-type>
<body-style>
SAV 4D
</body-style>
<year>
2012
</year>
</hash>
问题发生在我试图打印出xdebug给出错误的那两个属性引擎类型和正文样式时
$result = simplexml_load_string($query);
$enginetype = $result->engine-type;
$bodystyle = $result->body-style ;
echo $enginetype .'<br />'. $bodystyle ;
那些是来自xdebug的错误
Notice: Use of undefined constant type - assumed 'type'
Notice: Use of undefined constant style - assumed 'style
当我试图将它们保存到我的数据库时,值为0
其他属性正常工作
答案 0 :(得分:3)
使用curly complex syntax表示带有特殊字符的标识符。
$enginetype = $result->{'engine-type'};
$bodystyle = $result->{'body-style'} ;
答案 1 :(得分:2)
engine-type
在PHP中不是有效的标签名称,因此不能直接用于引用对象的属性。
PHP允许“变量属性”,使用大括号语法,它接受属性名称作为某个表达式的结果:该表达式可以像字符串一样简单。
$result->{'engine-type'};
这允许动态构建属性名称(在这种情况下不需要),如
$var = 'bar';
$result->{'foo-'.$var};
我们有一个这种语法的示例,处理与问题中完全相同的场景,目前在SimpleXML Basic Usage手册页上以示例#3 的形式提供。
示例#3获取
<line>
<?php include 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line; ?>
以上示例将输出:
PHP解决了我所有的网络问题
答案 2 :(得分:1)
问题是你的表达式被解释为变量$result->engine
减去常数type
。
试试这个:
var_dump($result->{'engine-type'});