php怎么用nodeValue修改xml指定节点的值,难!

mond999 2009-11-10 11:14:27
一个外部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,但我在学习中,还不会,请指教!

特别提示,不要给那种节点替换的方法,我要的是修改哦!

请高手不吝赐教!感谢!
...全文
505 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hubeice 2012-06-30
  • 打赏
  • 举报
回复
按照上面的方法执行了一次,结果XML里的数据全没了
ksni1990 2011-07-20
  • 打赏
  • 举报
回复
谢谢`` 正找这个呢``
huangboxi 2010-01-11
  • 打赏
  • 举报
回复
学习
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
$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();
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
$xmldata=simplexml_load_string($strXML);    
$dup = $xmldata->xpath("/html/table[@id='2']");
$dup[0]->head = 'link2';
$xml = $xmldata->asXML();
echo $xml;

simplexml 加xpath
mond999 2009-11-10
  • 打赏
  • 举报
回复
居然这里的高手也少的很
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mond999 的回复:]
非常感谢您的指导,现正在研究xml,simplexml,dom, xpath 。所以问题多多,再次感谢!
[/Quote]
xml,simplexml,dom,xpath哪一块,都不是小东西,慢慢研究吧,好运,呵呵.
mond999 2009-11-10
  • 打赏
  • 举报
回复
非常感谢您的指导,现正在研究xml,simplexml,dom, xpath 。所以问题多多,再次感谢!
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
以下是正确代码.其实最好还是你能明白里面的原理.
$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');
mond999 2009-11-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>
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
其实不是我的方法不对,只是你的xml格式不符合.
/是从根目录开始搜索的.
$emps = $xpath->query("/html/table[@id=2]/head");
=>

$emps = $xpath->query("//table[@shuyu_id=52]/onetableshuliang");


onetableshuliang必须是个节点才行.
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
将你xml的完整格式帖一个出来.
mond999 2009-11-10
  • 打赏
  • 举报
回复
我在代码:
<?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;
?>

我的输出结果是个数子。我的路径没有问题!
问题就是,没有修改文本
程序猿之殇 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mond999 的回复:]
楼上回答的都很正确,可是遗憾的是。我现在加载的外部xml文件,我修改了加载方法,但是却修改不了数据!
[/Quote]
$dom->load('xxx.xml');
...
$dom->save('xxx.xml');
mond999 2009-11-10
  • 打赏
  • 举报
回复
我直接echo $dom->saveXML();出的结果也一样的没有改动!
mond999 2009-11-10
  • 打赏
  • 举报
回复
结果是一样,没有改动。怎么办?大侠!
foolbirdflyfirst 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mond999 的回复:]
楼上回答的都很正确,可是遗憾的是。我现在加载的外部xml文件,我修改了加载方法,但是却修改不了数据!
[/Quote]
要把数据重新写进原来的xml文本
file_put_contents("原来的文件.xml",$dom->saveXML());
mond999 2009-11-10
  • 打赏
  • 举报
回复
楼上回答的都很正确,可是遗憾的是。我现在加载的外部xml文件,我修改了加载方法,但是却修改不了数据!

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧