$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');

解决方案 »

  1.   

    Re:hookee() 
    Fatal error: Call to undefined method DOMXPath::evaluate()
    报这个错误
      

  2.   

    上述代码我测试通过,会不会是其它问题,php5的话方法不会是undefined,
    文档中的描述:DOMXPath->evaluate() --  Evaluates the given XPath expression and returns a typed result if possible.
      

  3.   

    Re:hookee() 
    我查看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 可用啊
    会是版本问题吗?这个问题困扰我好久了你用的是什么环境?我用的是一个集成环境
      

  4.   

    PHP Version 5.1.2
    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测的。 
      

  5.   

    没做过php的,dom的基本思想是通用的
    基本思想:1\首行返回dom对象
    2\遍历dom节点或返回dom的node节点
    3\取得节点的属性对象或集合
    可返回getattribute,对于类用classname
    4\只要获得了节点,就可用添加节点
      

  6.   

    不能用DOMXPath,就直接用DOMDocument来操作。<?php
    $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');
    ?>
      

  7.   

    还有个问题 第一个元素的属性怎么取出来呢?getElementsByTagName() 这个取出的指定标签下的所有元素
    但<server url="192.168.0.180" port="1935" />它只有属性 没有子元素了
      

  8.   

    用johnpanq(飞花逐月)的方法解决了 取出空元素属性的问题
    但我觉得好麻烦 有没有简单的呢
    $servers=$dom->getElementsByTagName("server");
    foreach($servers as $server)
    {
      foreach($server->attributes as $servernode){
      echo $servernode->nodeName.'='.$servernode->nodeValue;}
    }
      

  9.   

    在这里要特别感谢johnpanq(飞花逐月) 以及hookee() ,以及曾经帮助过我的所有人,谢谢你们无私的帮助。