目前,我有这个用于将数据附加到我的项目文件:
$xmldoc = new DOMDocument();
$xmldoc->load('ex.xml');
$item= $xmldoc->createElement('item');
$item->setAttribute('id', '100');
$item->setAttribute('category', 'Fitness');
$item->setAttribute('name', 'Basketball');
$item->setAttribute('url', 'http://google.com');
$item->setAttribute('description', 'This is a description');
$item->setAttribute('price', '899');
$xmldoc->getElementsByTagName('items')->item(0)->appendChild($item);
$xmldoc->save('ex.xml');
现在在添加之前,我想检查具有相同属性id值的现有元素“item”。
如果确实如此,它应该使用这些新数据更新该元素。
目前它只是附加并且不检查任何内容。
答案 0 :(得分:2)
$xmldoc = new DOMDocument();
$xmldoc->load('ex.xml');
$xpath = new DOMXPath($xmldoc);
$query = $xpath->query('/mainXML/items/item[@id = "100"]');
$create_new_node = false;
if($query->length == 0)
{
$item = $xmldoc->createElement('item');
$create_new_node = true;
}
else
{
$item = $query->item(0);
}
$item->setAttribute('id', '100');
$item->setAttribute('category', 'Fitness');
$item->setAttribute('name', 'Basketball');
$item->setAttribute('url', 'http://google.com');
$item->setAttribute('description', 'This is a description');
$item->setAttribute('price', '899');
if($create_new_node)
{
$xmldoc->getElementsByTagName('items')->item(0)->appendChild($item);
}
$xmldoc->save('ex.xml');
答案 1 :(得分:1)
我没有使用过这个功能,但看起来很适合DOMDocument: Get Element By ID
如果您获得匹配的元素,请对其进行编辑,如果没有,请将其发布。
答案 2 :(得分:0)
如果你有这个xml文件的DTD,它指定“id”属性是ID
类型(即它的值在文档中是唯一的并唯一标识其元素),那么你可以使用{{ 3}}
但是,您很可能没有DTD。在这种情况下,您应该只使用XPath:
$xmldoc = new DOMDocument();
$xmldoc->load('ex.xml');
$xpath = new DOMXPath($xmldoc);
$results = $xpath->query('//items/item[@id=100][0]');
if (!$results->length) {
$item= $xmldoc->createElement('item');
$item->setAttribute('id', '100');
$item->setAttribute('category', 'Fitness');
$item->setAttribute('name', 'Basketball');
$item->setAttribute('url', 'http://google.com');
$item->setAttribute('description', 'This is a description');
$item->setAttribute('price', '899');
$xmldoc->getElementsByTagName('items')->item(0)->appendChild($item);
$xmldoc->save('ex.xml');
}
您还应考虑使用DOMDocument::getElementById()
执行此任务。这个xml的结构和操作方式可能更适合SimpleXML。