这是我正在使用的XML片段:
<category name="pizzas">
<item name="Tomato & Cheese">
<price size="small">5.50</price>
<price size="large">9.75</price>
</item>
<item name="Onions">
<price size="small">6.85</price>
<price size="large">10.85</price>
</item>
<item name="Peppers">
<price size="small">6.85</price>
<price size="large">10.85</price>
</item>
<item name="Broccoli">
<price size="small">6.85</price>
<price size="large">10.85</price>
</item>
</category>
这就是我的php的样子:
$xml = $this->xml;
$result = $xml->xpath('category/@name');
foreach($result as $element) {
$this->category[(string)$element] = $element->xpath('item');
}
一切正常,除了$ element-&gt; xpath('item'); 我也尝试过使用:$ element-&gt; children();以及其他xpath查询,但它们都返回null。 为什么我不能访问某个类别的孩子?
答案 0 :(得分:1)
看起来您正在尝试根据类别构建树,并按类别名称键入。为此,您应该将代码更改为:
$xml = $this->xml;
//Here, match the category tags themselves, not the name attribute.
$result = $xml->xpath('category');
foreach($result as $element) {
//Iterate through the categories. Get their name attributes for the
//category array key, and assign the item xpath result to that.
$this->category[(string)$element['name']] = $element->xpath('item');
}
使用原始代码:$result = $xml->xpath('category/@name');
您的结果是名称属性节点,作为属性,不能有子节点。
现在,如果您只想要所有项目的列表,可以使用$xml->xpath('category/items')
,但这似乎不是您想要的。