一个外部xml文件01.xml
……
<table id="2">
<head>中国</head>
</table>
<table id="3">
<head>其它小国</head>
</talbe>
……
我现在要修改这个xml一节点<table id="2">下<head>中国</head>的内容
怎么修改,不要给我foreach的方法,那个对于上万个table节点的xml,太消耗资源!要用dom+xpath的方法修改。似乎用到一个nodeValue,但我在学习中,还不会,请指教!特别提示,不要给那种节点替换的方法,我要的是修改哦!请高手不吝赐教!感谢!

解决方案 »

  1.   

    $xmldata=simplexml_load_string($strXML);    
    $dup = $xmldata->xpath("/html/table[@id='2']");   
    $dup[0]->head = 'link2';   
    $xml = $xmldata->asXML();   
    echo $xml;
    simplexml 加xpath
      

  2.   

    $strXML = <<<TEST
    <html>
    <table id="2">
    <head>中国</head>
    </table>
    <table id="3">
    <head>其它小国</head>
    </table>
    </html>
    TEST;$dom = new DOMDocument();
    $dom->loadXML($strXML);$xpath = new DOMXPath($dom);
    $emps = $xpath->query("/html/table[@id=2]/head");
    $emps->item(0)->nodeValue = "222";
    echo $dom->saveXML();
      

  3.   

    楼上回答的都很正确,可是遗憾的是。我现在加载的外部xml文件,我修改了加载方法,但是却修改不了数据!
      

  4.   

    要把数据重新写进原来的xml文本
    file_put_contents("原来的文件.xml",$dom->saveXML());
      

  5.   

    我直接echo $dom->saveXML();出的结果也一样的没有改动!
      

  6.   

    $dom->load('xxx.xml');
    ...
    $dom->save('xxx.xml');
      

  7.   

    我在代码:
    <?php 
    $dom = new DOMDocument();
    $dom->load("../m-admin/m-user_div/user03-8/storehouse.xml");$xpath = new DOMXPath($dom);
    $emps = $xpath->query("/table[@shuyu_id=52]/onetableshuliang");
    $emps->nodeValue = "2222222";
    $dom->saveXML();
    $sxml=$dom->save("../m-admin/m-user_div/user03-8/storehouse.xml");
    echo $sxml;
    ?>我的输出结果是个数子。我的路径没有问题!
    问题就是,没有修改文本
      

  8.   

    将你xml的完整格式帖一个出来.
      

  9.   

    其实不是我的方法不对,只是你的xml格式不符合.
    /是从根目录开始搜索的.
    $emps = $xpath->query("/html/table[@id=2]/head");
    =>$emps = $xpath->query("//table[@shuyu_id=52]/onetableshuliang");
    onetableshuliang必须是个节点才行.
      

  10.   

    不是,我并没有怀疑过您的方法。只是不知道问题在哪儿!
    以下是我的xml文件:
    <?xml version="1.0" encoding="gb2312"?>
    <u_form>
      <head>
      <chuangjianshijian>09-11-04 16:26:19</chuangjianshijian>
          <s_com>01</s_com>
              <s_user>user03</s_user>
      </head>
     <content>
    <table shuyu_id="52">
    <pname>如果小数</pname>
    <onetableshuliang>1</onetableshuliang>
    </table>
    <table shui_id="53">
    <pname>如果小数2</pname>
    <onetableshuliang>2</onetableshuliang>
    </table>
    </content>
    </u_form>
      

  11.   

    以下是正确代码.其实最好还是你能明白里面的原理.
    $dom = new DOMDocument();
    $dom->load('t3.xml');$xpath = new DOMXPath($dom);
    $emps = $xpath->query("//table[@shuyu_id=52]/onetableshuliang");
    $emps->item(0)->nodeValue = "444";
    $dom->save('t3.xml');
      

  12.   

    非常感谢您的指导,现正在研究xml,simplexml,dom, xpath 。所以问题多多,再次感谢!
      

  13.   

    xml,simplexml,dom,xpath哪一块,都不是小东西,慢慢研究吧,好运,呵呵.
      

  14.   

    按照上面的方法执行了一次,结果XML里的数据全没了