解析XML文档笔记

使用JDK中的DOM解析器进行解析XML文档

(1)要读入一个XML文档,首先需要获取DocumentBuilder对象

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDoucmentBuilder();

(2)读入解析的XML文档

三种方式读入:

1.   从文件中读入

      File f = ...;

      Document doc = builder.parse(f);

2.用一个url

URL u = ...;

Document doc = builder.parse(u);

3.指定任意一个输入流

InputStream in = ...;

Document doc = builder.parse(in);

注意:如果使用输入流作为输入源,那么对于那些以该文档的位置为相对路径而被引用 的文档,解析器将无法定位,比如在同一个目录中的 DTD。但是,可以通过安装一个 “实体解析器”(entity resolver)来解决这个问题。

可以通过调用 getDocumentElement 方法来启动对文档内容的分析,返回根元素。

Element root = doc.getDocumentElement();

例如处理下面的文档:

<?xml version="1.0"?>

<font>......</font>

调用 getDocumentElement 方法可以返回font元素,getTagName 方法可以返 回元素的标签名。在前面这个例子中,root.getTagName() 返回字符串 "font"。

如果要得到该元素的子元素(可能是子元素、文本、注释或其他节点),请使用 getChild Nodes 方法,这个方法返回一个类型为 NodeList 的集合。这个类型在标准的 Java 集合类创建之前就存在了,它有一个不同的访问协议;item 方法将得到指定索引值的 项;getLength 方法则提供了项的总数。可以像这样枚举所有子元素:

for(int i=0;i<children.getLength();i++)

{

     Node child = children.item(i);

     if(child instanceof Element)

     {

           Element  childElement = (Element) child;

           ......

     }

}

 

如果想获取它们包含的文本字符串。这些文本字符串 本身都包含在 Text 类型的子节点中。既然知道了这些 Text 节点是惟一的子元素,就可以 用 getFirst-Child 方法而不用再遍历一个 NodeList。然后可以用 getData 方法获取存 储在 Text 节点中的字符串。

<?xml version="1.0"?>

<font>

 <name>hello world</name>

<size>36</size>

</font>

 

NodeList children = root.getChildNodes();

for(int i=0;i<children.getLength();i++)

{

     Node child = children.item(i);

     if(child instanceof Element)

     {

           Element  childElement = (Element) child;

           Text textNode = (Text) childElement.getFirstChild();

           string text = textNode.getData.trim();

           if(childElement.getTagName.equals("name"))

           {

                  name = text;

           }

        else  if(childElement.getTagName.equals("size"))

           {

                 size = Integer.parseInt(text);

           }

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值