在PHP中解析XML命名空间格式


Parse XML namespace format in PHP

我有一个类似的xml文件,我想将其解析为常规xml,尝试循环值,特别是Cell值。

<APIReport xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Rochester.Models">
<Column xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>Name</d2p1:string>
    <d2p1:string>Surname</d2p1:string>
</Column>
<Dates>29-04-2016, 00:00:00 - 29-04-2016, 23:59:59</Dates>
<Id>1200</Id>
<Row>
    <APIReportRow>
        <Cell xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d4p1:string>Francesco</d4p1:string>
            <d4p1:string>Delolli</d4p1:string>
        </Cell>
    </APIReportRow>
    <APIReportRow>
        <Cell xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d4p1:string>Roberto</d4p1:string>
            <d4p1:string>Delolli</d4p1:string>
        </Cell>
    </APIReportRow>
</Row>
<Title>Nomi</Title>

因此,我尝试用SimpleXML在PHP中解析它,使用以下简单代码:

$xml = simplexml_load_string($xmlstring);
print_r($xml);

Cell值为空:

SimpleXMLElement Object
(
    [Column] => SimpleXMLElement Object
        (
        )
    [Dates] => 29-04-2016, 00:00:00 - 29-04-2016, 23:59:59
    [Id] => 1200
    [Row] => SimpleXMLElement Object
        (
            [APIReportRow] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [Cell] => SimpleXMLElement Object
                                (
                                )
                        )
                    [1] => SimpleXMLElement Object
                        (
                            [Cell] => SimpleXMLElement Object
                                (
                                )
                        )
                )
        )
    [Title] => Nomi
)

我的问题很简单:如何获得XML的Cell值?

感谢@IMSoP,我得到了解决方案:

$xml = simplexml_load_string($xmlstring);
$rows = $xml->Row->APIReportRow;
foreach ($rows as $row) {
    $cell = $row->Cell->children('d4p1', true);
    echo "Name: " . (string) $cell->string[0] . "'n";
    echo "Surname: " . (string) $cell->string[1] . "'n";
}