$doc = new DOMDocument();
$doc->load( 'cc.xml' );
$xpath = new DOMXPath($doc);
$nodes = $xpath->evaluate('/clientSet/server');
echo $nodes->item(0)->getAttribute('url');
$nodes->item(0)->setAttribute('url', '192.168.0.181');
$doc->save('cc.xml');$nodes = $xpath->evaluate('/clientSet/emotions');
$node = $nodes->item(0);
$new = $doc->createElement('item');
$new->setAttribute('name','name_value');
$new->setAttribute('src','src_value');
$new->setAttribute('duration','duration_value');
$node->appendChild($new);
$doc->save('cc.xml');
$doc->load( 'cc.xml' );
$xpath = new DOMXPath($doc);
$nodes = $xpath->evaluate('/clientSet/server');
echo $nodes->item(0)->getAttribute('url');
$nodes->item(0)->setAttribute('url', '192.168.0.181');
$doc->save('cc.xml');$nodes = $xpath->evaluate('/clientSet/emotions');
$node = $nodes->item(0);
$new = $doc->createElement('item');
$new->setAttribute('name','name_value');
$new->setAttribute('src','src_value');
$new->setAttribute('duration','duration_value');
$node->appendChild($new);
$doc->save('cc.xml');
Fatal error: Call to undefined method DOMXPath::evaluate()
报这个错误
文档中的描述:DOMXPath->evaluate() -- Evaluates the given XPath expression and returns a typed result if possible.
我查看phpinfo.php 最上面显示的版本信息 PHP Version 5.0.0
DOM 项里介绍
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.5.11
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled XPath Support 可用啊
会是版本问题吗?这个问题困扰我好久了你用的是什么环境?我用的是一个集成环境
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.22
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled我用zend studio测的。
基本思想:1\首行返回dom对象
2\遍历dom节点或返回dom的node节点
3\取得节点的属性对象或集合
可返回getattribute,对于类用classname
4\只要获得了节点,就可用添加节点
$dom = new DOMDocument();
$dom->load( 'test.xml' ); //查找emotions节点
$emotions = $dom->getElementsByTagName('emotions');//第一个emotions节点
$emotion = $emotions->item(0);//查找emotions节点下的item节点
$items = $emotion->getElementsByTagName("item");//遍历所有item节点
foreach ($items as $item)
{
//遍历item节点所有属性
foreach ($item->attributes as $attr)
{
//列出所有属性
//echo $attr->nodeName .' = '. $attr->nodeValue.'<br>';
//修改name='Birthday'的属性为name='BirthdayNew'
if ($attr->nodeValue == 'Birthday')
{
$item->setAttribute('name','BirthdayNew');
}
}
}//新增item节点
$new_item = $dom->createElement('item');
$new_item->setAttribute('name','new_name');
$new_item->setAttribute('src','new_src');
$new_item->setAttribute('duration','new_duration');//添加到最后
$emotion->appendChild($new_item);$dom->save('test2.xml');
?>
但<server url="192.168.0.180" port="1935" />它只有属性 没有子元素了
但我觉得好麻烦 有没有简单的呢
$servers=$dom->getElementsByTagName("server");
foreach($servers as $server)
{
foreach($server->attributes as $servernode){
echo $servernode->nodeName.'='.$servernode->nodeValue;}
}