1

我试图解析一个包含基本属性的简单 xml 字符串

<hash>
<engine-type>
I4 DI
</engine-type>
<body-style>
SAV 4D
</body-style>
<year>
2012
</year>
</hash>

当我试图打印出 xdebug 给出的这 2 个属性 engine-type 和 body-style 时,问题发生了

$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 就可以正常工作

4

3 回答 3

3

使用curly complex 语法来表示带有特殊字符的标识符。

$enginetype = $result->{'engine-type'};
$bodystyle = $result->{'body-style'} ;
于 2013-01-19T18:27:30.943 回答
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 解决了我所有的网络问题

于 2013-01-19T18:37:01.300 回答
1

问题是您的表达式被解释为 variable $result->engineminus constant type。试试这个:

var_dump($result->{'engine-type'});

于 2013-01-19T18:26:58.243 回答