2005-06-30 19:40
名佳丽!的java教程!
虽然名佳丽!我不是写java出生的,但是,咱也可以学嘛!现学现卖,java如何解析XML
上网随便搜索了一下现在流行的解析方法,发现有DOM、SAX、JDOM、DOM4J等等,而且,成都心情写了一篇《四种XML解析技术之不完全测试》的文章,对这四种方法进行了测试,发现使用Dom4J的效率是最高的,咱们是刚入门,什么负担都没有,完全可以自由选择,就像买DLSR一样,不是从胶片机过来的,没有C还是N的镜头存储,随便选嘛!Hoho,不好意思,最近看DLSR看多了,什么都忘那上面想的。^^
Dom4J现在的最新的版本是1.6.1怎么下Dom4J,怎么安装咱就不说了。把下下来的jar包加到classpath就可以使用了。
Dom4J还是比较博大精深的,但是我现在的要求没有这么高,我开始的目的只是想要XML文件来代替txt文件实现配置文件的功能就可以了,so,基本只需要从XMl文件中读取就可以了,实现最简单的功能,当然,只要仔细看下去,你会发现其实修改也很简单。
这个是我们学习所用的XML文件:
首先,读取整个XML文件:
需要org.dom4j.io.SAXReader包和org.dom4j.Document包,然后通过以下方式就可以了:
然后是读取XML文件中各个值:
method1:读取article中level的值:
method2:读取author节点下的节点的值得信息:
method3:通过直接指定某个节点的名字来获得值:
哈哈,简单吧,当然我要实现的功能也很简单,至于怎么样把XML当数据用,咱还不会呢………
上面的代码中,只用method3就可以实现我所需要的功能了,而且,也是我自己原创的哦,虽然只有简单的三行,但是可以论家好不容易查了API才用出来的哦。
下面是一些有用的资料:
Dom4J的主页
Dom4J API
使用 dom4j 解析 XML
以及参考的一些文章:
成都心情:四种XML解析技术之不完全测试
Holen@Blog:用dom4j建立,修改XML文档,并解决格式化输出和中文问题
不迷不悟:用Dom4j解析XML及中文问题
注释:
(*1):如果想对"//article/@level"究竟代表什么有更深的了解,可以到Zvon tutorial.
(*2):java.util.List,非Dom4J类
最后是附带的源代码:
上网随便搜索了一下现在流行的解析方法,发现有DOM、SAX、JDOM、DOM4J等等,而且,成都心情写了一篇《四种XML解析技术之不完全测试》的文章,对这四种方法进行了测试,发现使用Dom4J的效率是最高的,咱们是刚入门,什么负担都没有,完全可以自由选择,就像买DLSR一样,不是从胶片机过来的,没有C还是N的镜头存储,随便选嘛!Hoho,不好意思,最近看DLSR看多了,什么都忘那上面想的。^^
Dom4J现在的最新的版本是1.6.1怎么下Dom4J,怎么安装咱就不说了。把下下来的jar包加到classpath就可以使用了。
Dom4J还是比较博大精深的,但是我现在的要求没有这么高,我开始的目的只是想要XML文件来代替txt文件实现配置文件的功能就可以了,so,基本只需要从XMl文件中读取就可以了,实现最简单的功能,当然,只要仔细看下去,你会发现其实修改也很简单。
这个是我们学习所用的XML文件:
| |
首先,读取整个XML文件:
需要org.dom4j.io.SAXReader包和org.dom4j.Document包,然后通过以下方式就可以了:
| SAXReader saxReader = new SAXReader(); Document document = saxReader.read(File inputXml); |
然后是读取XML文件中各个值:
method1:读取article中level的值:
| List list = document.selectNodes("//article/@level" ); //将"//article/@level"(*1)读取到List(*2)中 Iterator iter=list.iterator();//将List转换到Iterator中 while(iter.hasNext()){ Attribute attribute=(Attribute)iter.next(); //读入Attribute中 if(attribute.getValue().equals("Intermediate")){} //通过getValue()方法获得String类型的值 attribute.setValue("Introductory"); //通过setValue(String str)方法更新值 System.out.println(attribute.getValue()); } |
method2:读取author节点下的节点的值得信息:
| list = document.selectNodes("//article/author"); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); //转换为Element Iterator iterator=element.elementIterator("firstname"); //通过Element.elementIterator(String node)方法或者某个节点 while(iterator.hasNext()){ Element firstNameElement=(Element)iterator.next(); if(firstNameElement.getText().equals("Marcello")) //通过getText()方法获得String类型的值 firstNameElement.setText("Ayesha"); //通过setText(String str)方法更新值 System.out.println(firstNameElement.getText()); } } |
method3:通过直接指定某个节点的名字来获得值:
| String nodes="//firstname"; Node nodd = document.selectSingleNode(nodes); //通过selectSingleNode(String nodename)方法返回Node类型的值 System.out.println(nodd.getText()); //通过Node类中getText()即可获取String类型的值 //Node也有setText(String value)方法来更新Node的值 |
哈哈,简单吧,当然我要实现的功能也很简单,至于怎么样把XML当数据用,咱还不会呢………
上面的代码中,只用method3就可以实现我所需要的功能了,而且,也是我自己原创的哦,虽然只有简单的三行,但是可以论家好不容易查了API才用出来的哦。
下面是一些有用的资料:
Dom4J的主页
Dom4J API
使用 dom4j 解析 XML
以及参考的一些文章:
成都心情:四种XML解析技术之不完全测试
Holen@Blog:用dom4j建立,修改XML文档,并解决格式化输出和中文问题
不迷不悟:用Dom4j解析XML及中文问题
注释:
(*1):如果想对"//article/@level"究竟代表什么有更深的了解,可以到Zvon tutorial.
(*2):java.util.List,非Dom4J类
最后是附带的源代码:
import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.Element; import org.dom4j.Attribute; import org.dom4j.io.XMLWriter; import org.dom4j.io.SAXReader; import org.dom4j.DocumentException; import java.util.List; import java.util.Iterator; import java.io.*; public class D4T { public void modifyDocument(File inputXml){ try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(inputXml); List list = document.selectNodes("//article/@level" ); Iterator iter=list.iterator(); while(iter.hasNext()){ Attribute attribute=(Attribute)iter.next(); if(attribute.getValue().equals("Intermediate")){} //attribute.setValue("Introductory"); System.out.println(attribute.getValue()); } list = document.selectNodes("//article/author"); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); Iterator iterator=element.elementIterator("firstname"); while(iterator.hasNext()){ Element firstNameElement=(Element)iterator.next(); if(firstNameElement.getText().equals("Marcello")) //firstNameElement.setText("Ayesha"); System.out.println(firstNameElement.getText()); } } String nodes="//firstname"; Node nodd = document.selectSingleNode("//lastname"); System.out.println(nodd.getText()); } catch(DocumentException e){ System.out.println(e.getMessage()); } catch(Exception e){ System.out.println(e.getMessage()); } } public static void main(String[] argv){ D4T dom4jParser=new D4T(); dom4jParser.modifyDocument(new File("d:/code/mytest/catalog.xml")); } } |
小样,挺强嘛,虽然我还没空查阅――
看俺是看不懂。。。
但是这篇字里行间洋溢的感觉,咋就觉得不像是毛毛同学写的捏?
有点瞄苗和那女人的风格。。。