有时用来生成一个xml格式的文件,或者把一个字符串转成xml格式的,或者便利一个节点下的对象,记住,便利一个节点下的对象,仅是这个节点下的对象,而没有孙节点,下面是从网找的一些基本操作;
XML(Extensible Markup Language)即可扩展标记语言,这个东东的详细情况可以参见百度百科,我主要说下它的两大作用1.存储数据;2.跨平台的数据传输(也就是应用于不 同的平台之上,有桥梁的作用,我是这么理解的,呵呵)。ok,现在说说对xml文件的解析,java本事对xml有一套规范和解析方式,但是不是很好用, 目前比较常用的其他解析类库有jdom和dom4j,相比之下据说dom4j相对强大一点,那我们就用dom4j吧。
首先需要说明的是这个技术的学习方略是按照官方的文档进行。并没有参见其他的文章,虽然文档时英文的,虽然我的英语很菜,但还是能看懂的。相当于官 方说明的翻译工作吧。
1.下载dom4j的压缩包,个人比较喜欢去官方找。英文的网站找google大神就搞定了。
2.在eclipse下新建java工程,放入dom4j要用到的jar包,这里要用到两个dom4j-1.6.1.jar和jaxen-1.1- beta-6.jar个,后者是在用到xpath的时候用,负责会报错!
3.打开下载的安装包下的docs目录下index.html文件,一大堆英文出来了,点左侧的那个quick start快速开始,翻译工作开始:
Parsing XML解析xml文件,第一种是官方文档上的,二三是我自己加的:
Java代码
1. /**
2. * 解 析XML文件,这里有多重读取方式,这里是URL
3. * @param url
4. * @return
5. * @throws DocumentException
6. */
7. public Document parse(URL url) throws DocumentException{
8. SAXReader reader = new SAXReader();
9. return reader.read(url);
10. }
11. /**
12. * 采 用用路径构造文件的方法
13. * @param path
14. * @return
15. * @throws DocumentException
16. */
17. public Document parse(String path) throws DocumentException{
18. SAXReader reader = new SAXReader();
19. return reader.read(new File(path));
20. }
21. /**
22. * 用 文件流对象构造xml文档
23. * @param in
24. * @return
25. * @throws DocumentException
26. */
27. public Document parse(InputStream in) throws DocumentException{
28. SAXReader reader = new SAXReader();
29. return reader.read(in);
30. }
Using Iterators用迭代打方式解析xml文件的内容
Java代码
1. /**
2. * 遍 历xml文件
3. * @param document
4. */
5. public void iteratorFind(Document document){
6. Element root = document.getRootElement();
7. //从根节点遍历
8. for(Iterator i = root.elementIterator();i.hasNext();){
9. Element element = (Element) i.next();
10. System.out.println(element.attributeValue("name"));
11. System.out.println(element.getText());
12. }
13.
14. //从某一节点开始遍历
15. for(Iterator i = root.elementIterator("foo");i.hasNext();){
16. Element element = (Element) i.next();
17. //做一些事情
18. }
19. //遍历属性
20. for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
21. Attribute attribute = (Attribute) i.next();
22. // do something
23. }
24.
25. }
Powerful Navigation with XPath强大的xpath导航
Java代码
1. /**
2. * X- path的查找方式
3. * @param document
4. */
5. public void xpathFind(Document document){
6. List<Element> list = document.selectNodes("/root/author");
7. for(int i=0;i<list.size();i++){
8. Element element = list.get(i);
9. String name = element.attributeValue("name");
10. System.out.println(name);
11. }
12. System.out.println(list.size());
13. Node node = document.selectSingleNode("/root/author");
14. //采用@+属性名的方式获得属内容
15. String name = node.valueOf("@name");
16. String text = node.getText();
17. System.out.println(name + text);
18. }
Fast Looping 快速循环,实际上和iterator差不多
Java代码
1. public void treeWalk(Document document) {
2. treeWalk( document.getRootElement() );
3. }
4.
5. public void treeWalk(Element element) {
6. for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
7. Node node = element.node(i);
8. if ( node instanceof Element ) {
9. treeWalk( (Element) node );
10. }
11. else {
12. // do something....
13. }
14. }
15. }
Creating a new XML document 创建一个新的xml文档,建议按我的教程先执行这步操作,后面的解析内容都是应用这部分demo产生的xml文件进行的。
Java代码
1. /**
2. * 创 建一个XML文件
3. * @return
4. */
5. public Document createDocument(){
6. Document document = DocumentHelper.createDocument();
7. Element root = document.addElement("root");
8. Element author1 = root.addElement("author")
9. .addAttribute("name", "James")
10. .addAttribute("location", "UK")
11. .addText( "James Strachan" );
12.
13. Element author2 = root.addElement( "author" )
14. .addAttribute( "name", "Bob" )
15. .addAttribute( "location", "US" )
16. .addText( "Bob McWhirter" );
17.
18. return document;
19.
20. }
Write xml document to file 将xml文件写入到文件系统,即存储到磁盘,但是这个写的文件格式不是很好看
Java代码
1. /**
2. * 写 xml文档到磁盘文件
3. * @param document
4. * @throws IOException
5. */
6. public void writeFile(Document document) throws IOException{
7. XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
8. writer.write(document);
9. writer.close();
10. }
这里提供一种比较好看的输出方式
Java代码
1. /**
2. * 格 式话写xml文件
3. * @param document
4. * @throws IOException
5. */
6. public void prettyWrite(Document document) throws IOException{
7. OutputFormat format = OutputFormat.createPrettyPrint();
8. XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
9. writer.write(document);
10. writer.close();
11. }
Converting to and from Strings 将字符串转换成xml文件
Java代码
1. /**
2. * 将 文本的xml文件转换成xml文档
3. * @return
4. * @throws DocumentException
5. */
6. public Document convertFromStr() throws DocumentException{
7. String xmlStr = "<books><book author='李连杰'>1基金</book>& lt;book author='周星驰'>演员的自我修养</book></books>";
8. Document document = DocumentHelper.parseText(xmlStr);
9. return document;
10. }
也可以将xml文档转换成string
Java代码
1. /**
2. * 将 xml文档转换成String
3. * @return
4. * @throws DocumentException
5. */
6. public String covertFromXML() throws DocumentException{
7. Document document = convertFromStr();
8. return document.asXML();
最后写下dom4j对visitor的支持,先写一visitor类,继承自VisitorSupport
Java代码
1. public class MyVisitor extends VisitorSupport {
2.
3. @Override
4. public void visit(Attribute attribute) {
5. System.out.println("-----"+attribute.getValue());
6. }
7.
8. @Override
9. public void visit(Element element) {
10. System.out.println("------"+element.getText());
11. }
12.
13. }
调用的时的方法,直接使用文档或者节点.appept(new 自己写的visitor类);
Java代码
1. public void testVisitor() throws DocumentException{
2. Document document = xml.convertFromStr();
3. //document.accept(new MyVisitor());
4. document.selectSingleNode("/books/book").accept(new MyVisitor());
5. }