我在PHP 5中使用XPath来解析XML文档。我遇到的问题是编写foreach
来正确显示以下数组:
XML文档示例
价值1 价值2
$xmlfile = 'link_to_file.xml';
$xmlRaw = file_get_contents($xmlfile);
$xml = new SimpleXMLElement($xmlRaw);
$install_files = $xml->xpath('//files');
foreach($install_files as $row)
{
echo $row['file'];
}
// $ row的var_dump给出了以下内容
array(1) { [0]=> object(SimpleXMLElement)#21 (2) { ["file"]=> string(12) "value 1" ["folder"]=> string(8) "value 2" } }
理想情况下,我希望使用$row['file']
或$row['folder']
来获取价值。谢谢你的帮助。
答案 0 :(得分:2)
数组中的项目是 SimpleXMLElement 对象。您可以使用$object->property
语法访问他们的properties。所以试试这个:
foreach ($array as $row) {
echo $row->folder . $row->file;
}
答案 1 :(得分:0)
如果我理解你的例子,
foreach ($array as $row)
{
// do something with $row['file'] or $row['folder']
}
答案 2 :(得分:0)
如果你只想处理一个元素,你不一定需要一个循环,但它也不会受到伤害
根据您的输出file
和folder
是为xpath查询返回的元素的子元素。您可以通过$parentElement->childElement
访问它们。如果它们是属性,则使用$element['attributeName']
$foo = new SimpleXMLElement(getData());
foreach( $foo->xpath('row[@id="r2"]') as $row ) {
echo $row->file, " | ", $row->folder, "\n";
}
echo "-----\n";
// same thing if you have more than one element in your result set
foreach( $foo->xpath('row[@id="r2" or @id="r3"]') as $row ) {
echo $row->file, " | ", $row->folder, "\n";
}
function getData() {
return '<foo>
<row id="r1">
<file>value 1.1</file>
<folder>value 1.2</folder>
</row>
<row id="r2">
<file>value 2.1</file>
<folder>value 2.2</folder>
</row>
<row id="r3">
<file>value 3.1</file>
<folder>value 3.2</folder>
</row>
</foo>';
}
打印
value 2.1 | value 2.2
-----
value 2.1 | value 2.2
value 3.1 | value 3.2