2012-07-25 143 views
0

XML:通過XML遍歷

<?xml version="1.0" encoding="utf-8"?> 
    <NConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <NDomain>ex1</NDomain> 
      <Parameters> 
       <version>p</version> 
       <siteFolder>site1</siteFolder> 
       <cssGeneral></cssGeneral> 
       <cssLogin>l.css</cssLogin> 
      </Parameters> 
      <Database> 
       <hostname>898</hostname> 
       <username>j</username> 
       <password>k</password> 
       <name>n</name> 
      </Database> 
<NDomain>ex2</NDomain> 
       <Parameters> 
        <version>p</version> 
        <siteFolder>site1</siteFolder> 
        <cssGeneral></cssGeneral> 
        <cssLogin>l.css</cssLogin> 
       </Parameters> 
       <Database> 
        <hostname>898</hostname> 
        <username>j</username> 
        <password>k</password> 
        <name>n</name> 
       </Database> 
     </NConfig> 

我想問下Ex1到所有節點itterate

到目前爲止,我可以這樣直接訪問節點:

$xmldata = simplexml_load_file("config.xml"); 

foreach($xmldata->Parameters as $item) 
{ 
     echo "<p>Version: " . $item->version . "</p>"; 
     echo "<p>Site Folder: " . $item->siteFolder . "</p>"; 
} 

但是這並不會使它成爲特定的根節點,而是會遍歷列表中的所有參數。我怎樣才能做到這一點?

+0

可以請你詳細闡述「根節點特定」? – Makesh 2012-07-25 12:16:56

+0

剛剛編輯它 - 以便你有特定的參數節點屬於它們各自的根節點: ex2 etc等 – thejoker 2012-07-25 12:42:05

回答

1

如果您<Parameters><Database>爲相應<NDomain>是specfic,我更喜歡你應該有UR XML模式是這樣的:

 <NDomain> 
      <name>ex1</name> 
      <Parameters> 
       <version>p</version> 
       <siteFolder>site1</siteFolder> 
       <cssGeneral></cssGeneral> 
       <cssLogin>l.css</cssLogin> 
      </Parameters> 
      <Database> 
       <hostname>898</hostname> 
       <username>j</username> 
       <password>k</password> 
       <name>n</name> 
      </Database> 
     </NDomain> 
     <NDomain> 
     <name>ex2</name> 
       <Parameters> 
        <version>p</version> 
        <siteFolder>site1</siteFolder> 
        <cssGeneral></cssGeneral> 
        <cssLogin>l.css</cssLogin> 
       </Parameters> 
       <Database> 
        <hostname>898</hostname> 
        <username>j</username> 
        <password>k</password> 
        <name>n</name> 
       </Database> 
     </NDomain> 

所以,你可以分析如下:

foreach($xmldata->NDomain as $item) 
    { 
    $par = $item->Parameters; 
    echo "<p>Version: " . $par->version . "</p>"; 
    echo "<p>Site Folder: " . $par->siteFolder . "</p>"; 
    } 
+0

明白了!謝謝 – thejoker 2012-07-25 13:55:59

+0

歡迎.... :) – Makesh 2012-07-25 13:58:51

0

你可以只遍歷根節點的孩子,像這樣:

$first = true; 
foreach($xmldata->children() as $item) 
{ 
    if($first === true) { 
     $first = false; 
     continue; 
    } 
} 

該循環就會趕上<NDomain><Parameters><Database>,所以你需要一個簡單的檢查,以跳過第一次迭代省略<NDomain>

+0

正確,所以我使用一個如果之前的foreach? – thejoker 2012-07-25 12:43:25

+0

不,在裏面。我會更新我的答案。 – nickb 2012-07-25 13:01:56