2012-07-04 89 views
0

我有以下XML代码:读节点的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. 如果你只在命名空间前缀感兴趣,只需设置的children()第二个参数true
+0

呵呵,在某种程度上,我很高兴有一个'xmlns =“”'外面那么我想;)'foreach($ weirdemptynamespace-> dsAanbod-> Pand as $ kot){echo $ kot-> PandID;}'应该做的伎俩? – Wrikken