解析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);

           }

     }

}

发布了18 篇原创文章 · 获赞 0 · 访问量 2172

猜你喜欢

转载自blog.csdn.net/weixin_42163781/article/details/81234578