六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 143|回复: 0

JAVA读取,控制XML

[复制链接]

升级  36.67%

29

主题

29

主题

29

主题

秀才

Rank: 2

积分
105
 楼主| 发表于 2013-1-29 07:30:59 | 显示全部楼层 |阅读模式
有此XML文件,文件名为:Test1XMLDocument,此文件的路径为(E:/JavaProject/JavaStudy/src/com/xml/Test1XMLDocument.xml)

此XML内容为下:

<?xml version="1.0" encoding="UTF-8"?><root>    <people>        <abb>            <name>xiaobai</name>            <age>26</age>        </abb>        <faimly>        <name>pef</name>        <num>3</num>        </faimly>    </people></root>


使用JAVA来读取此XML的信息。


首先,我们需要读取此XML文件,我们创建一个DocumentBuilderFactory对象factory。之后在根据此factory创建一个builder对象



DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();

有了创建好的builder对象,我们就可以把XML文件读入了,这里有3种读入方式,分别为:

1.从文件中:
File file= ...;Document document = builder.parse(file);

2.从一个URL读取:
URL url= ...;Document document = builder.parse(url);

3.从一个指定的任意输入流:
InputStream in=...;Document document = builder.parse(in);

以下代码就是描述XML文件从文件中获取:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        DocumentBuilder builder = factory.newDocumentBuilder();        Document document = builder.parse(new File("E:/JavaProject/JavaStudy/src/com/xml/Test1XMLDocument.xml"));

正确读入XML文件后,我们就可以对此XML文件进行操作了。我们可以使用org.w3c.dom包下的Document接口对其进行控制(关于Document接口提供的方法,可以查看JDK文档)。

现在,我们可以使用document接口下的getDocumentElement()方法来获取此XML文件的根元素,来分析此XML的内容。

具体代码:(这里的document为刚以上代码获取的document实例)

Element root = document.getDocumentElement();

获取了XML文件里的根元素之后,我们就可以来查找此XML的子节点了:

NodeList list = root.getChildNodes();        for (int i = 0; i < list.getLength(); i++) {        Node element = (Node) list.item(i);            System.out.println(element);}

打印出:

[#text:

    ]
[people: null]
[#text:

]

这里的输出多出了

[#text:

    ]

[#text:

]

这里表面此XML文件中有空格,如果把上面的XML文件改成如下形式:

<?xml version="1.0" encoding="UTF-8"?><root><people>        <abb>            <name>xiaobai</name>            <age>26</age>        </abb>        <faimly>        <name>pef</name>        <num>3</num>        </faimly></people></root>

在次运行,结果将为:

[people: null]


找到原因了,修改代码,去掉空格:

NodeList list = root.getChildNodes();        for (int i = 0; i < list.getLength(); i++) {        Node element = (Node) list.item(i);//去掉XML里的空格。        if(element instanceof Element ){        System.out.println(element);    }

现在输出:

[people: null]

现在,我们修改以下以上的XML文件:

<?xml version="1.0" encoding="UTF-8"?><root><people><abb><name>xiaobai</name><age>26</age></abb><faimly><name>pef</name><num>3</num></faimly></people><bug><name>css</name><deep>8</deep></bug></root>


现在,在执行一下以上的代码:

NodeList list = root.getChildNodes();        for (int i = 0; i < list.getLength(); i++) {        Node element = (Node) list.item(i);//去掉XML里的空格。        if(element instanceof Element ){        System.out.println(element);    }

现在输出:

[people: null]
[bug: null]

从这里可以看出,我们根据得到的NodeList list的实例,根据item方法进行对list的索引,得到了root下的儿子(子节点)。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表