无法使用DomDocument编辑/保存DOM XML元素属性

时间:2013-01-28 03:21:05

标签: php xml dom domdocument

我有一个像下面这样的XML文件。我必须使用DOMDocument,因此不允许使用额外的类。 (注意我已将其简化,真实文件在salesItems和catalogItems中都有很多条目):

<?xml version="1.0"?>
<catalog>
    <saleItems count="3">

        <item name="Xbox 360 Wired Controller" price="19" stock="50" salePrice="12" onSale="yes">
            <image>Xbox360Controller.jpg</image>
            <description>A wired controller for an Xbox 360 Game Console. Comes in either white or black.</description>
        </item>

    </saleItems>

    <catalogItems count="12">
        <item name="Dell Alienware Laptop 15 inch" price="2500" stock="200" salePrice="0" onSale="no">
            <image>alienwareLaptop.jpg</image>
            <description>sample description here</description>
        </item>
    </catalogItems>
</catalog>

我需要执行以下操作:

1)根据name =“”属性查找要更新的节点(例如:我必须找到的唯一数据是项目名称)

2)当找到它时,我需要编辑该项目的数量属性(减去1)

3)当数量更新后,我需要将XML文件保存回服务器。

我正处于结束这个问题,我很难让$ domDocument合作。这是我到目前为止所做的,但它似乎根本不能正常工作。我可以获得股票并减去它,但我的更改没有保存到文件中。

foreach( $GLOBALS['catalogItems'] as $item ){
    if( $item->getAttribute('name') == $itemName ){
        // we have a match
        $oldStock = $item->getAttribute("stock");
        $item->setAttribute("stock", $oldStock + $modifier);

        $dom->save('xml/catalog.xml');
    }
}

任何帮助非常感谢!

1 个答案:

答案 0 :(得分:1)

通过PHP聊天解决: http://chat.stackoverflow.com/transcript/message/7402294#7402294

问题是他的$GLOBALS['catalogItems']选择器包含DOMText个项目,这些项目在调用$item->getAttribute('name')时会失败。解决方案是确保$item实际上是item节点,然后执行其他检查item

相关问题