simplexml_load_string有错误吗?

时间:2014-02-09 14:49:26

标签: php xml

当我使用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
    )

)

)

1 个答案:

答案 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对象时应该使用什么?

您可以使用IMSoPsimplexml_dump()simplexml_tree()辅助函数。这是project on GitHub