2016-04-30 5 views
0

У меня есть xml-файл, который выглядит так, и я хочу проанализировать его как обычный XML, попытавшись скопировать значения, в частности значение Cell.Формат пространства имен XML в формате PHP

<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> 

Так что я попытался разобрать его в PHP с SimpleXML, используя этот простой код:

$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 
) 

Мой вопрос просто: как я могу получить значение Cell XML?

+1

вы пытались получить доступ непосредственно к некоторому значению сотового узла? Что-то вроде: echo (string) $ xml-> Row-> APIReportRow [0] -> Cell; – nanocv

+1

Значения ячеек не пусты, 'print_r' просто не может справиться с удивительностью SimpleXML: P Ключ доступа к элементам внутри' Cell' заключается в том, что они используют «пространства имен» (теги с ':' в них). Для этого вам нужно [метод 'children()') (http://php.net/manual/en/simplexmlelement.children.php). – IMSoP

ответ

0

Благодаря @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"; 
} 
Смежные вопросы