我有一个XML文件,它被转换为带有xpath的数组。最终,我希望能够访问数组中的变量,但似乎没有方法可行。
echo $items['member']['name'];
不起作用
echo $items['name'];
也不是这个
echo $items['members']['member']['name'];
也不是这个
echo $items[0][0]
也不是这个
echo $items[0]
也不是这个
echo $items[0]['object']['name']
也不是这个
$items[0]['name']
也不是这个
我不知道问题是什么,但我想它可能与xpath及其对阵列的影响。我知道还有其他类似的线程但没有资源似乎有所帮助。
PHP:
$xml = simplexml_load_file('XML/profiles.xml'); //Create XML variable from XML file.
$items = $xml->xpath('member');
var_dump($items);
?>
XML:
<member>
<name>AndrewHarvey</name>
<location>Carleton-Victoria</location>
<party>L</party>
</member>
<member>
<name>BenoitBourque</name>
<location>Kent North</location>
<party>L</party>
</member>
<member>
<name>BernardLeBlanc</name>
<location>Memramcook-Tantramar</location>
<party>L</party>
</member>
<member>
<name>BertrandLeBlanc</name>
<location>Kent North</location>
<party>L</party>
</member>
<member>
<name>BillFraser</name>
<location>Miramichi</location>
<pos>Tourism</pos>
<pos>Heritage and Culture</pos>
<pos>Northern and Miramichi Funds</pos>
<party>L</party>
</member>
and so on...
$ array的Var转储:
array (size=49)
0 =>
object(SimpleXMLElement)[2]
public 'name' => string 'AndrewHarvey' (length=12)
public 'location' => string 'Carleton-Victoria' (length=17)
public 'party' => string 'L' (length=1)
1 =>
object(SimpleXMLElement)[3]
public 'name' => string 'BenoitBourque' (length=13)
public 'location' => string 'Kent North' (length=10)
public 'party' => string 'L' (length=1)
2 =>
object(SimpleXMLElement)[4]
public 'name' => string 'BernardLeBlanc' (length=14)
public 'location' => string 'Memramcook-Tantramar' (length=20)
public 'party' => string 'L' (length=1)
3 =>
object(SimpleXMLElement)[5]
public 'name' => string 'BertrandLeBlanc' (length=15)
public 'location' => string 'Kent North' (length=10)
public 'party' => string 'L' (length=1)
4 =>
object(SimpleXMLElement)[6]
public 'name' => string 'BillFraser' (length=10)
public 'location' => string 'Miramichi' (length=9)
public 'pos' =>
array (size=3)
0 => string 'Tourism' (length=7)
1 => string 'Heritage and Culture' (length=20)
2 => string 'Northern and Miramichi Funds' (length=28)
and so on...
答案 0 :(得分:1)
您的数组是一个Object数组,因此您需要->
来访问它们。使用foreach,您可以访问该阵列。
foreach($items as $val){
echo $val->name;
echo $val->location;
echo $val->party;
}
试试这个并告诉我。如果数组中还有其他内容,则需要以类似的方式执行此操作。
答案 1 :(得分:1)
要添加评论,Frayne Konok让您可以像这样访问这些值:
$name = array[0] -> name;
你也可以循环遍历每一个:
foreach ($node as $index => $data)
{
$name = $data -> name;
$location = $data -> location;
if (property_exists($data, 'party'))
{ $party = $data -> party; }
if (property_exists($data, 'pos'))
{ $pos_attr = $data -> pos[0]; }
}
这里的小免责声明......我没有对此进行测试,所以你想要玩这个,但你明白了。
var_dump顶部的数组表示外包装是一个数组,需要像一个数组一样进行访问。每个条目下面的对象(SimpleXMLElement)表示该数组中的项目是对象,必须按原样访问。 poc 属性下的数组(size = 3)表示它是一个数组。你可以看到我要去哪里。使用括号表示法array[0]
或array['example']
访问数组,并使用箭头表示法object -> name
或object -> {'0'}
(在奇数情况下)访问对象。
答案 2 :(得分:0)
paths
始终返回SimpleXMLElement::xpath()
个对象的数组。它不是多维或嵌套数组。但是SimpleXMLElement
实现了很多语法糖。其中之一是属性的数组语法。
SimpleXMLElement
但是要访问子节点,您需要使用对象语法。
$element = new SimpleXMLElement('<foo attr="bar"/>');
echo $element['attr'];
由于语法糖,$xml = simplexml_load_file('XML/profiles.xml');
foreach ($xml->xpath('member') as $member) {
echo $member->name;
}
的{{1}}输出不是实际对象的完整/正确表示。例如,您也可以迭代SimpleXMLElement属性。
var_dump()