2014-12-20 102 views
0

我想填充從XML文件中的數據表的HTML表格和線沿線的在想:填充處理XML數據

1)創建XML數據:

<menu> 
    <pizza> 
    <regular> 
     <item name="Tomato Cheese">Tomato Cheese 
     <price size="small">1</price> 
     <price size="large">2</price> 
     <description>A</description> 
     </item> 
     <item name="Onion">Onion 
     <price size="small">3</price> 
     <price size="large">4</price> 
     <description>B</description> 
     </item> 
    </regular> 
    </pizza> 
</menu> 

2)在HTML中創建表:

foreach ($xml->xpath('/menu/pizza/descendant::item') as $item) 
     { 
      print "<tr><td>".$item."</td>" ; 
     } 

<table border="1"> 
    <thead> 
    <tr> 
     <th rowspan="2">Item </th> 
     <th rowspan="2">Description</th> 
     <th colspan="2">Price</th> 
    </tr> 
    <tr> 
     <th>Small</th> 
     <th>Large</th> 
    </tr> 
    </thead> 
    <tbody> 
    ... 

3)在XPath查詢使用foreach語句

這對第一行非常有用,但我無法弄清楚如何填充其餘列。

+0

我已經採取了編輯對這個問題的標籤更何況我覺得你實際使用這裏的技術的自由。請儘量在將來包含這些內容,以便正確的人員找到您的問題。 – IMSoP

+1

你已經很好地描述了你迄今爲止所做的以及你的總體目標是什麼。如果你想添加具體的問題,你可以把它變成一個很好的編程問題。請參閱幫助中心的[我如何提出一個好問題?](http://stackoverflow.com/help/how-to-ask)。 – hakre

回答

0

如果您查看basic usage examples for SimpleXML,您會看到使用$child = $parent->tagName訪問子元素(標記),對於非唯一名稱,可以使用foreach ($parent->tagName as $child)。要訪問屬性,請使用$tag['attributeName']

這裏有幾件事情在你的代碼,你可以用$item做到:

  • $name = $item['name'];
  • $description = $item->description;
  • foreach ($item->price as $price) { ... }
  • 這個循環裏面,$size = $price['size']; - 這個人真正需要你改變你的XML有點,因爲你有small="small",這將是很難合作;你最好使用<price size="small"><price size="large">因此一切都是一致的
+0

感謝您清理如何訪問元素,但我認爲我的問題更多的是如何自動化整個表來填充;即混合HTML w /查詢和循環。例如:當前循環將創建以下代碼:'​​$ item​​$ item'(用每個循環的不同項目替換$ item)。也就是兩個表格行的開始。我真正堅持的是如何獲得'​​$ description'要追加到第一行末尾'​​$ item',然後重複第二行。我希望我能清楚地看到。 – user3717955

+0

@ user3717955只需在現有環境旁邊的環路內添加更多的'print'語句即可。 PHP不知道或不關心他們的意思,只是將它們傳遞給瀏覽器。所以你可以寫'print'<';打印'tr';打印'>';'如果你想要的話,瀏覽器會看到''。 – IMSoP

0

感謝IMsOP。
只是想跟進,因爲我已經解決了這個問題。

首先,我跑以下查詢:

/* querying the XML data to return arrays containing pizza name, description, small price, large price 
$pName = $xml->xpath("/menu/pizza/regular/descendant::item"); 
$description = $xml->xpath('/menu/pizza/regular/descendant::item/description'); 
$sPrice = $xml->xpath('/menu/pizza/regular/descendant::item/price[@size="small"]'); 
$lPrice = $xml->xpath('/menu/pizza/regular/descendant::item/price[@size="large"]'); 

然後我填充使用循環表。
這裏有三種不同的方法的情況下,任何人有興趣:

/* using a WHILE loop */ 
$e = 0; 
while ($e < count($pName)) 
{ 
    echo "<tr><th scope='row' class='vHeader'>".$pName[$e]."</th><td>".$description[$e]."</td><td>".$sPrice[$e]."</td><td>".$lPrice[$e]."</td></tr>"; 
    $e++; 
} 

/* using a FOR loop */ 
for($i = 0 ;$i < count($pName); $i++) 
{ 
    echo "<tr><th scope='row' class='vHeader'>".$pName[$i]."</th><td>".$description[$i]."</td><td>".$sPrice[$i]."</td><td>".$lPrice[$i]."</td></tr>"; 
} 

/* another way using a FOR loop */ 
for ($e = 0; $e < count($pName); $e++) 
{ 
    $name = $pName[$e] ; 
    $desc = $description[$e] ; 
    $sp = $sPrice[$e] ; 
    $lp = $lPrice[$e] ; 
    echo "<tr><th scope='row' class='vHeader'>".$name[0]."</th><td>".$desc[0]."</td><td>".$sp[0]."</td><td>".$lp[0]."</td></tr>"; }