我有一个股票报告文件(来自外部来源,因此我无法以任何方式进行修改),我想迭代所有元素(我必须将它们保存到MySQL表中)。我看到$ xml-> Stockfile是一个对象数组(2个项目),所以我试着把它放到一个数组中。
由于某种原因,$myarray
仅包含$myarray = $xml->StockFile
分配后的第一个元素。
这是我的代码:
$xml = simplexml_load_file("../docs/stock.xml");
print_r($xml);
$myarray = $xml->StockFile;
print_r($myarray);
stock.xml:
<NewDataSet>
<StockFile>
<MatrixID>1533</MatrixID>
<Brand>myBrand</Brand>
<ProductCode>001</ProductCode>
<RRP>29.99</RRP>
<Image2Name />
<Image3Name />
</StockFile>
<StockFile>
<MatrixID>1534</MatrixID>
<Brand>myBrand</Brand>
<ProductCode>002</ProductCode>
<RRP>29.99</RRP>
<Image2Name />
<Image3Name />
</StockFile>
</NewDataSet>
为什么我只获得一件而不是全部? 我该怎么做才能检索整个数组?
答案 0 :(得分:1)
小心使用SimpleXMLElement。它有很多魔力。了解魔法或被print_r
或var_dump
或类似输出弄糊涂。你的例子扩展了:
$myarray = $xml->StockFile;
print_r($myarray); # shows one element
# foreach has both elements:
foreach($myarray as $name => $stockfile)
{
echo $name, ":\n", $stockfile->asXML(), "\n\n";
}
即使它是相同的变量($myarray
),它的行为也会有所不同,具体取决于它所使用的上下文。在foreach
内SimpleXMLElement
(即该对象的类型)将在此处指定的名为StockFile
的子元素上提供迭代器:
$myarray = $xml->StockFile;
但是在某种单一上下文中使用该变量,它将返回带有该名称的 first 子元素的内部字符串:
echo $myarray, "\n";
(在你的情况下只是一些空白行)。
请参阅演示:https://eval.in/83787
SimpleXML运行到这个“陷阱”实际上很常见。我建议通过手册中给出的示例了解基本用法:
答案 1 :(得分:0)
将最后两行更改为
foreach ($xml->StockFile as $nextStockFile) {
print_r ($nextStockFile);
}