php 按节点读取xml 中的数据 http://www.ibm.com/developerworks/cn/opensource/os-xmldomphp/请参考这个 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 chinmo 谢谢你的回复,你给的参考我早就看过了,就是针对我想通过code这个唯一的标识去查找对应的单条记录的明细,比如2008102308042019这条数据,我通过点code的连接然后查出2008102308042019,ok,[email protected]数据,这个程序处理我没有思路。可能是我自己没有变通过来,呵呵……但我现在依旧没有想到更好的解决办法! 可以考虑先把 xml 转化成 array 再遍历 会方便很多 参考 http://keithdevens.com/software/phpxml 你是说点击连接传参数过去吗?$codes = $item->getElementsByTagName( $_GET['code'] ); $code = $codes->item(0)->nodeValue; $names = $item->getElementsByTagName( "name" ); $name = $names->item(0)->nodeValue; $name = iconv("UTF-8","GB2312",$name); $emails = $item->getElementsByTagName( "email" ); $email = $emails->item(0)->nodeValue; 你是指这样的吗?还是什么? 应该不是很难.用dom操作xml.1 code你这个是已经得到的了,不管你用什么方式,传给想得到code对应所有数据的程序.就可以了.可是$_GET也可以是$_POST2 处理的应用程序接收传过来的唯一的值. 查找 item这个节点,获得结点对象,遍历,如果发现与code相同的值,就返回当前item下所有其它标签的值.如果用xml解析函数将xml直接转成数组操作,可能是最普通也最直观的方式.上手也比较容易. chinmo 对是通过参数传值,然后通过参数获得对应的数据一组item的值 xml设计的不好。把code的值换成item的属性值,就会容易的多,如:<item code='2008102308042019'> <name>ok</name> <email>[email protected]</email></item>$dom = new DomDocument('1.0', 'utf-8');$dom -> load('sis.xml');$xpath = new domxpath($dom);$path = $xpath->query($路径);/rss/channel/item[position() = 1] 返回第一个item元素的子结点/rss/channel/item[@eth='E2'] 返回所有含有eth属性并且值为E2的子结点你的想法也能实现。很麻烦。得先取出所有<item>里的数据,然后比较出<code>的值等于2008102308042019的。再把其他数据取出。$a = $xpath->query($nodes);$roots = $a->item(0)->childNodes;foreach ($roots as $root_value){ $number = $root_value->nodeType; if($number == 1){ $arr[] = $root_value->nodeValue; }}取出所有值。再比较~ 看网页的一个正则的例子,出错了。帮看一下那错了呗。最好帮解释一下各个符号的意思,正在学 PHP对象编程一问,为什么输不出结果?? 如果根据本周的星期几计算出日期是多少 PHP 访问MYSQL 特殊字符怎么处理 请问为什么我在插入数据库中信息后用PHP查询显示没有结果 Smarty模板之section为何不能循环显示数组数据 php源码中多个if语句嵌套 怎么清晰明了?能有软件像易语言那样画出流程线吗? php 用ODBC方式接连MSSQL 时出错 数据库服务器连接函数无效的问题? phpwind 图片上传问题! 关于登录系统后统计在线人数的方法,求高人指点迷津 如何把数组ID相同的弹出
你是说点击连接传参数过去吗?$codes = $item->getElementsByTagName( $_GET['code'] );
$code = $codes->item(0)->nodeValue; $names = $item->getElementsByTagName( "name" );
$name = $names->item(0)->nodeValue;
$name = iconv("UTF-8","GB2312",$name); $emails = $item->getElementsByTagName( "email" );
$email = $emails->item(0)->nodeValue;
你是指这样的吗?还是什么?
用dom操作xml.
1 code你这个是已经得到的了,不管你用什么方式,传给想得到code对应所有数据的程序.就可以了.
可是$_GET也可以是$_POST
2 处理的应用程序接收传过来的唯一的值.
查找 item这个节点,获得结点对象,遍历,如果发现与code相同的值,就返回当前item下所有其它标签的值.如果用xml解析函数将xml直接转成数组操作,可能是最普通也最直观的方式.上手也比较容易.
<name>ok</name>
<email>[email protected]</email>
</item>
$dom = new DomDocument('1.0', 'utf-8');
$dom -> load('sis.xml');
$xpath = new domxpath($dom);
$path = $xpath->query($路径);/rss/channel/item[position() = 1] 返回第一个item元素的子结点
/rss/channel/item[@eth='E2'] 返回所有含有eth属性并且值为E2的子结点
你的想法也能实现。很麻烦。得先取出所有<item>里的数据,然后比较出<code>的值等于2008102308042019的。再把其他数据取出。
$a = $xpath->query($nodes);
$roots = $a->item(0)->childNodes;
foreach ($roots as $root_value){
$number = $root_value->nodeType;
if($number == 1){
$arr[] = $root_value->nodeValue;
}
}
取出所有值。再比较~