2012-07-04 3 views
0

У меня есть следующий код XML:Чтение узел в namepace SimpleXml

Файл 1.xml

<?xml version="1.0" encoding="utf-8"?> 
<DataSet xmlns=""> 
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <dsAanbod> 
    <Pand diffgr:id="Pand1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
     <PandID>231384</PandID> 
    </Pand> 
    </dsAanbod> 
</diffgr:diffgram> 
</DataSet> 

Как я могу прочитать данные между

я имел следующий код PHP

<?php 


    $xml_url = "1.xml"; 
    $xml = simplexml_load_file($xml_url); 

    foreach ($xml as $entry){ 

     //Use that namespace 
     $namespaces = $entry->getNameSpaces(true); 
     //Now we don't have the URL hard-coded 
     $diffgr = $entry->children($namespaces['diffgr']); 
     echo $diffgr->diffgram->dsAanbod->Pand->PandID; 
} 


?> 

Но это не работает.

Может кто-нибудь помочь мне получить доступ к узлу, где он является дочерним элементом элемента пространства имен.

С уважением

ответ

2

О, с чего начать. Этот рабочий код может проиллюстрировать некоторые проблемы:

<?php 
    $xml_url = "1.xml"; 
    $xml = simplexml_load_file($xml_url); 
    foreach($xml->children('diffgr',true) as $diffgr){ 
      $weirdemptynamespace = $diffgr->children('',true); 
      echo $weirdemptynamespace->dsAanbod->Pand->PandID; 
    } 

Чтобы назвать несколько проблем:

  1. xmlns="" не то же самое, как не имен, и, по-моему, просто .... хорошо , странно.
  2. Вашего foreach был преждевременный (children('diffgr') должен называться в корневом элементе (Dataset).
  3. Если вы заинтересованы только в пространстве имен префикса, просто установить 2-й аргумент children() в true.
+0

Хеха , в каком-то смысле я рад, что есть меньше «xmlns =» «, тогда я думал;)' foreach ($ weirdemptynamespace-> dsAanbod-> Pand as $ kot) {echo $ kot-> PandID;} ' должен делать трюк? – Wrikken