实际上我希望我的页面能够在PHP5上读取这个XML文件。
我将此示例作为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
请,任何信息都会有所帮助!!!
答案 0 :(得分: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>';
查看手册后,您需要展开它以获取样本,循环子节点(这是产品),然后再次使用->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>';