当我使用simplexml_load_string时,我发现了一个问题,在使用它之后会丢失数据。
$xml = '<dblp>
<inproceedings key="conf/aaim/He07" mdate="2007-06-28">
<author>Dan He</author>
<title>
<i>BMA</i>
<sup>*</sup>
: An Efficient Algorithm for the One-to-Some Shortest Path Problem on Road Maps.
</title>
<pages>346-357</pages>
<year>2007</year>
<crossref>conf/aaim/2007</crossref>
<booktitle>AAIM</booktitle>
<ee>http://dx.doi.org/10.1007/978-3-540-72870-2_33</ee>
<url>db/conf/aaim/aaim2007.html#He07</url>
</inproceedings>
</dblp>';
print_r(simplexml_load_string($xml));
运行结果:
SimpleXMLElement Object
(
[inproceedings] => SimpleXMLElement Object
(
[@attributes] => Array
(
[key] => conf/aaim/He07
[mdate] => 2007-06-28
)
[author] => Dan He
[title] => SimpleXMLElement Object
(
[i] => BMA
[sup] => *
)
[pages] => 346-357
[year] => 2007
[crossref] => conf/aaim/2007
[booktitle] => AAIM
[ee] => http://dx.doi.org/10.1007/978-3-540-72870-2_33
[url] => db/conf/aaim/aaim2007.html#He07
)
)
数据在哪里':路线图上一对一最短路径问题的有效算法。'
我希望xml到array.but数据丢失了?谢谢。
我想要结果:
Array
(
[0] => Array
(
[inproceedings] =>Array
(
[author] => Dan He
[title] => Array
(
[0] => BMA
[2] => *
[5] => : An Efficient Algorithm for the One-to-Some Shortest Path Problem on Road Maps.
)
[pages] => 346-357
[year] => 2007
[crossref] => conf/aaim/2007
[booktitle] => AAIM
[ee] => http://dx.doi.org/10.1007/978-3-540-72870-2_33
[url] => db/conf/aaim/aaim2007.html#He07
)
)
)
答案 0 :(得分:3)
SimpleXMLElement的第一条规则是:你没有print_r()
或var_dump()
SimpleXMLElement对象
至于您无法看到相关信息的原因,请参阅documentation:
中的此说明注意: SimpleXML制定了向大多数方法添加迭代属性的规则。无法使用var_dump()或其他任何可以检查对象的内容来查看它们。
要访问标题,您可以执行以下操作:
$xmlObj = simplexml_load_string($xml);
$title = (string) $xmlObj->inproceedings->title;
SimpleXMLElement对象的属性本身就是对象,因此您需要通过在开头添加(string)
(或使用strval()
)将它们强制转换为字符串。现在,它们的值将被转换为字符串而不是对象。
当您想要检查SimpleXML对象时应该使用什么?
您可以使用IMSoP的simplexml_dump()
和simplexml_tree()
辅助函数。这是project on GitHub。