SimpleXml无法访问子级

时间:2013-04-18 01:28:32

标签: php simplexml

这是我正在使用的XML片段:

<category name="pizzas">
    <item name="Tomato &amp; 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。 为什么我不能访问某个类别的孩子?

1 个答案:

答案 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'),但这似乎不是您想要的。