当前位置: 首页 > 图文教程 > 网络编程 > PHP > Php利用java解析xml

PHP
随时给自己贴的图片加文字的php代码
一个可分页的基于文本的PHP留言板源码
一个简单的PHP投票程序源码
一个模仿oso的php论坛程序(之一)
一个模仿oso的php论坛程序源码(之二)
一个模仿oso的php论坛程序源码(之三)
dedecms 制作模板中使用的全局标记图文教程
一个简单的PHP&MYSQL留言板源码
PHP实现多服务器session共享之NFS共享的方法
随时给自己贴的图片加文字的php水印
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
火车头采集器3.0采集图文教程
用PHP生成静态HTML速度快类库
Discuz!插件:自动隐藏帖子
php中判断一个字符串包含另一个字符串的方法
dedecms后台验证码总提示错误的解决方法
加速XP搜索功能堪比vista
人尽可用的Windows技巧小贴士之下篇
PHP+Ajax 网站SEO查询工具 提供代码
用PHP实现的生成静态HTML速度快类库

PHP 中的 Php利用java解析xml


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 153 ::
收藏到网摘: n/a

请先安装JAVA的执行环境与PHP结合,具体参考http://www.phpx.com/happy/thr78795.html
或者下载http://www.javax.org/download/php_java.rar
里面我写有个readme.txt说明文档,这个压缩包是个简单的例子。
要下载我的JAVA源码请到http://www.javax.org/download/JavaXml.rar
有其他问题请到http://www.javax.org/提问。

一开始我想用PHP解析XML,但发现PHP要解析XML有点麻烦,好象PHP5比较方便了,但我这边没有装5,还是4.3。后来我看到IBM一篇文章(http://www-900.cn.ibm.com/developer...kit/index.shtml)讲到可以利用JAVA来做,所以我现在就试验了一下。
要解析的XML文件:first.xml,内容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<product>
<hello>
<name>小曾</name>
<age>20</age>
</hello>
<hello>
<name>雨伞</name>
<age>20</age>
</hello>
</product>
其中<product>是根,<hello>是节点,一共有两个,name值名字不一样,一个是小曾一个是雨伞,年龄一样。
下面看PHP解析时候的文件:
<?php
$JavaXml=newJava("JavaXml");//这里是生成一个我写的JAVA解析XML数据的类
$JavaXml->init();//这里为初始化,比如取global.properties文件里的XML文件目录(当然你下载了例子以后要改成你的XML文件目录)
$JavaXml->Parse("first.xml");//指定要解析的文件,相对于global.properties文件里指定的目录下
$JavaXml->get(0);//这里为取得第一个节点
echo$JavaXml->getValue("name")."<br>";//取得第一个节点name标签值
echo$JavaXml->getValue("age")."<br>";//取得第一个节点age标签值
$JavaXml->setValue("name","大头爸爸");//设置第一个节点name标签值为大头爸爸
$JavaXml->get(1);//这里为取得第二个节点
echo$JavaXml->getValue("name")."<br>";//取得第二个节点name标签值
echo$JavaXml->getValue("age")."<br>";//取得第二个节点age标签值
?>

$JavaXml->get(0);取得节点位置,比如我的XML文件有两组<hello>,这里get(0)的话就是取第一组的<hello>,get(1)就是取第二组的<hello>.
最后输出是
小曾
20
雨伞
20
因为$JavaXml->setValue("name","大头爸爸");这句修改了第一个节点的name标签的值,XML文件已经被更新过了,所以当再执行一次这个PHP文件的时候结果会成为
大头爸爸
20
雨伞
20

以上简单几句就解析完了,下面是我的JAVA类,里面用到了JDOM来解析XML。
importorg.jdom.*;
importorg.jdom.output.*;
importorg.jdom.input.*;
importjava.io.*;
importjava.util.*;
publicclassJavaXml{
publicStringpath=null;
publicStringXmlFileName=null;
publicSAXBuildersax=null;
publicDocumentdoc=null;
publicElementroot=null;
publicListxlist=null;
publicElemente=null;
publicElementvalue=null;
publicStringgetTest(){
returnnewString("haha");
}
publicJavaXml(){
}
publicStringinit(){
InputStreamis=getClass().getResourceAsStream("global.properties");
PropertiesdbProps=newProperties();
try{
dbProps.load(is);
}
catch(Exceptione){
return("errorfile");
}
this.path=dbProps.getProperty("XmlPath");
return("ok");
}
publicvoidget(intchild){
this.e=(Element)xlist.get(child);
}
publicStringgetValue(Stringname){
this.value=e.getChild(name);
returnthis.value.getText();
}
publicvoidsetValue(Stringname,Stringvalue)throwsException{
this.value=e.getChild(name);
this.value.setText(value);
XMLOutputterxmlout=newXMLOutputter();
xmlout.output(doc,newFileOutputStream(path+XmlFileName));
}
publicvoidParse(StringXmlFileName)
throwsException
{
this.XmlFileName=XmlFileName;
this.sax=newSAXBuilder();
this.doc=sax.build(newFileInputStream(path+XmlFileName));
this.root=doc.getRootElement();
this.xlist=root.getChildren();
}
}