php xml使用simplexml_load_string从复杂的xml中获取数据

时间:2013-10-05 12:47:07

标签: php xml-parsing

<1:1>
    <1:b/>
    <1:body>
        <1:P>
            <1:PPR></1:PPR>
            <1:r>
                <1:rPR></1:rPR>
                <1:t>text here</1:t>
            </1:r>
        </1:P>
    </1:body>
</1:1>

我的xml看起来像那样,我需要得到&#34; 1:t&#34;来自每一个&#34; 1:p&#34;

但我遇到了一些问题,因为我不能$document->1:1->1:body->1:P->1:r->1:t 因为它不喜欢冒号

任何人都可以想到这个吗? 我试过把它们放在变量中,但没有快乐......

这是我到目前为止所拥有的:

$document = simplexml_load_string($xml);
$body = "1:body";
$r = "1:r";
$t = "1:t";
foreach ($document->$body as $p) {
    echo $p->$r->$t;
}

1 个答案:

答案 0 :(得分:0)

XML元素名称不能以数字开头。您的代码将产生大量警告,遗憾的是,XML无法解析。

Warning: simplexml_load_string(): Entity: line 1: parser error : StartTag: invalid element name in /Users/joelhinz/Kod/test/test.php on line 16
Warning: simplexml_load_string(): <1:1> in /Users/joelhinz/Kod/test/test.php on line 16
Warning: simplexml_load_string():  ^ in /Users/joelhinz/Kod/test/test.php on line 16
Warning: simplexml_load_string(): Entity: line 1: parser error : Extra content at the end of the document in /Users/joelhinz/Kod/test/test.php on line 16
Warning: simplexml_load_string(): <1:1> in /Users/joelhinz/Kod/test/test.php on line 16
Warning: simplexml_load_string():  ^ in /Users/joelhinz/Kod/test/test.php on line 16
Warning: Invalid argument supplied for foreach() in /Users/joelhinz/Kod/test/test.php on line 20

我想你必须将它转换为正确的XML,或者使用一个不那么挑剔的解析器。

关于冒号问题,如果你让其他人工作,你可能会$document->{1:1}->{1:body}等。