2014-09-12 56 views
1

第一要素+屬性和一個XML文件的副元素+屬性其實我想我的網頁上閱讀PHP5這個XML文件。閱讀PHP5

我有這樣的例子作爲我samples.xml文件:

<sample amount="5" name="Pasta" dest="pasta/sample_pasta.lua"> 
    <product name="pasta1"/> 
    <product name="pasta2"/> 
</sample> 
... 
<sample amount="18" name="Meat" dest="pasta/sample_meat.lua"> 
    <product name="meat1"/> 
    <product name="meat2"/> 
</sample> 

而且有我的PHP代碼:

<?php 
echo '<table><tr><td>Name</td><td>Amount</td><td>Product</td></tr>'; 
$reader = new XMLReader(); 
if (!$reader->open("samples.xml")) { 
die("Failed to open 'samples.xml'"); 
} 
while($reader->read()) { 
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'sample') { 
$amount = $reader->getAttribute('amount'); 
$name = $reader->getAttribute('name'); 
echo '<tr><td>'.$name.'</td><td>'.$amount.'</td><td>---?[array result here]?---</td></tr>'; 
} 
echo '</table>'; 
?> 

而這就是網頁上我的腳本打印:

名稱|金額|商品

意大利麪| 5 | ?--- [陣列這裏結果] ---

肉?| 18 | ??--- [陣列這裏結果] ---

但我需要這個頁面作爲數組就是這樣的閱讀產品名稱:

名稱|金額|產品

麪條| 5 | pasta1,pasta2

肉類| 18 | meat1,meat2

請,任何信息將是有益的!

+1

這應該使用更容易'SimpleXMLElement' – Ghost 2014-09-12 13:51:09

+0

我怎樣才能使用的SimpleXMLElement讀取與它們的屬性,第一和第二要素是什麼?並感謝您的回答! – user3050478 2014-09-12 13:55:16

回答

1

其實我挺有用的SimpleXMLElement,但這應該破解它。

echo '<table cellpadding="10"><tr><td>Name</td><td>Amount</td><td>Product</td></tr>'; 
$reader = new XMLReader(); 
if (!$reader->open("samples.xml")) { 
die("Failed to open 'samples.xml'"); 
} 
while($reader->read()) { 
    if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'sample') { 
     $amount = $reader->getAttribute('amount'); 
     $name = $reader->getAttribute('name'); 
     $sample = $reader->expand(); 
     $products = array(); 
     foreach($sample->childNodes as $product) { 
      if(get_class($product) != 'DOMElement') continue; 
      $products[] = (string) $product->getAttribute('name'); 
     } 

     echo '<tr><td>'.$name.'</td><td>'.$amount.'</td><td>'.implode(', ', $products).'</td></tr>'; 
    } 
} 
echo '</table>'; 

一旦尋找到手動,你需要將它擴大到拿到樣品,環路的childNodes(這是產品),並再次使用->getAttribute。收集數組中的屬性,然後使它們崩潰。

這裏是SimpleXMLElement版本(同一實際上可以概念):

$xml = simplexml_load_file('samples.xml'); 
echo '<table cellpadding="10"><tr><td>Name</td><td>Amount</td><td>Product</td></tr>'; 
foreach($xml->sample as $sample) { 
    $name = (string) $sample->attributes()->name; 
    $amount = (string) $sample->attributes()->amount; 
    $products = array(); 
    foreach($sample->product as $product) { 
     $products[] = (string) $product->attributes()->name; 
    } 
    $products = implode(', ', $products); 
    echo " 
     <tr> 
      <td>$name</td> 
      <td>$amount</td> 
      <td>$products</td> 
     </tr> 
    "; 
} 
echo '</table>'; 
+0

哦,我的天啊!非常感謝!!!它真的起作用了!我真的很感激它,現在我可以研究你的代碼:)謝謝 – user3050478 2014-09-12 14:02:44

+0

@ user3050478肯定沒有問題!很高興它有幫助! – Ghost 2014-09-12 14:06:43