`

Java - dom / dom4j 解析XML文件遇到的几个问题

    博客分类:
  • java
 
阅读更多
来源:http://www.cnblogs.com/jimmyqwy/archive/2010/07/10/1774934.html
最近稍微接触了下用Java Dom 解析XML的文件。

遇到两个小问题,就在这里做个笔记吧~



1. Node 的 getNodeValue方法返回的一直是null。

其实还是由于对这个类不熟悉的关系,导致了这个问题。

Node有很多类型,一般<html> </html> 这种类型叫做Element Node。

需要得到其中的文本,直接使用getNodeValue方法是行不通的。

因为此Node中包含的文本其实是属于另外一种Node类型,即 Text Node。

所以此文本对应的Node,是上述<html> Element Node的子节点。



解决方法:如同网上各处所说的

.getFirstChild().getNodeValue(); (第一个子节点的Value值)



至于为啥Element Node的Node Value是null值,

参照JavaDoc可知,其定义就是如此。详细参照如下:

http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/org/w3c/dom/Node.html



2. XML保存问题

使用了很多方法,不是有异常,就是输出为空文件。

后来发现,还是有一些需要注意的地方。

先上代码:


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

File f = new File( save_filename );  // 需要保存的名字

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
    builder = factory.newDocumentBuilder();
    // createing a new DOM-document...
    Document document = builder.newDocument();  // 1)
    
    Element saveRoot = document.createElement("Root");
    document.appendChild(saveRoot); // 2)
    saveTree( saveRoot, document );   // 添加各种节点,建立DOM树

    // Use a Transformer for output
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    transformer.setOutputProperty("indent", "yes");   // 3)

    // transform DOM 2 XML file  // 4)
    DOMSource source = new DOMSource(document);
    StreamResult result = new StreamResult( f );
    transformer.transform(source, result);
    
} catch (ParserConfigurationException e) {
    e.printStackTrace();
}



其中使用到的

DocumentBuilderFactory / DocumentBuilder /  TransformerFactory / DOMSource / StreamResult

意如其名,不用多解释了。

Question

1)全新 Document 的建立方式。

也可以使用读取时,建立的Document对象,只要更新相关的节点再保存即可。

此处为了练手,还是从头写了一遍。



2)document.appendChild 根节点

一开始词句忘记添加,所以导致输出空文本。

究其原因就是即使document.createElement后,也只是一个悬空节点,没有建立任何关系。

尤其是根节点,需要串联到document上。



3)此处即使使用了setOutputProperty("indent", "yes");

输出的文本文件,虽然节点之间有换行,

但是没有缩进,父节点和子节点的关系不是很明显。

解决方法:

在添加节点同时再添加一个上述的TextNode类型的子节点。

document.createTextNode("\n    ");

(不知道还有没有其他更加好的办法。。。)
分享到:
评论

相关推荐

    dom4j解析xml

    DOM4J提供了几个核心类和接口来帮助我们操作XML文档: 1. **Document**: 表示整个XML文档。 2. **Element**: 表示XML文档中的元素。 3. **Attribute**: 表示元素的属性。 4. **Text**: 表示元素中的文本内容。 5. *...

    java dom4j中生成xml文件

    Java DOM4J库是用于处理XML文档的一个强大的开源框架,它提供了一种简单而灵活的方式来创建、解析和操作XML文件。DOM4J这个名字中的“DOM”代表文档对象模型(Document Object Model),这是一种标准的API,用于在...

    使用Maven管理项目,实现DOM4j操作XML文件

    DOM4j则是一个强大的Java库,用于处理XML文档,提供了丰富的API来实现XML的读取、写入、修改等操作。在这个示例中,我们将深入探讨如何利用Maven管理和DOM4j来操作XML文件。 首先,让我们了解一下Maven。Maven是...

    dom4j解析xml.txt

    ### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J(Document Object Model for XML)是一款用于处理XML文档的轻量级Java库。它提供了一种非常简单且灵活的方式来创建、读取、修改和删除XML文档。DOM4J的主要...

    Dom4J解析XML源代码

    接下来,我们将通过几个关键步骤来演示如何使用Dom4J解析XML文件: 1. **加载XML文档**:使用`DocumentFactory`创建一个`Document`对象,该对象代表整个XML文档。可以使用`DocumentHelper.parseText()`或`SAXReader...

    dom4j.jar,java xml

    在Java XML处理中,DOM4J通常用于以下几个场景: - **XML解析**:读取XML文件并将其转化为内存中的数据结构,方便进一步处理。 - **XML生成**:创建XML文档,添加元素、属性和文本,然后保存为文件。 - **XML查询**...

    java 解析XML性能对比分析Demo

    本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...

    java_test..,/1---//17

    基于这些信息,我们可以推断出以下几个Java编程相关的重要知识点: 1. **XML处理**:Java提供了多种XML处理API,如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。...

    java dom 解析 xml 实例

    Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...

    dom4j 解析 大 文件

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。在处理大文件时,DOM4J结合XPath的使用,可以有效地管理和分析大量数据。在这个场景下,描述...

    dom4j读写xml文档实例

    DOM4J作为XML解析器,它以Java集合框架为基础,使得XML处理变得简单易懂。 首先,让我们了解DOM4J的几个核心概念: 1. **Element(元素)**:XML文档中的节点,如`&lt;tag&gt;`,包含属性和子元素。 2. **Attribute(属性...

    java解析xml——dom

    在Java中,DOM解析主要涉及以下几个步骤: 1. **创建DocumentBuilderFactory实例** ```java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); ``` 这里使用`DocumentBuilderFactory`的目的...

    Jdom、Dom4j 、dom解析xml文件

    在"ParseXml"这个压缩包中,可能包含了示例代码,演示了如何使用JDOM、DOM4J和DOM解析XML文件。通过阅读和理解这些代码,你可以更好地掌握这些库的用法,提升处理XML文件的能力。记得实践是检验理论的最好方式,尝试...

    JAVA DOM解析XML文件过程详解

    在 JAVA 中,DOM 解析 XML 文件的过程主要涉及到以下几个步骤: 1. 创建一个 DocumentBuilderFactory 对象 DocumentBuilderFactory 是一个工厂类,用于创建 DocumentBuilder 对象。DocumentBuilder 对象是用于解析 ...

    java_test--/.//15

    - 如何在Java中创建和解析XML文档,包括使用DOM、SAX、StAX或JAXB。 - CSV文件的读写操作,以及如何处理逗号分隔的数据。 - 如何使用IDE进行项目管理和代码编辑。 最后,虽然`Friends215.mp3` 不是与Java编程直接...

    Dom4j解析XML

    ### Dom4j解析XML及其中文问题解决 #### 一、Dom4j简介 Dom4j是一种用于处理XML的Java库,它提供了一种简洁而强大的API来读取、写入和操作XML数据。自2001年首次发布以来,Dom4j因其直观的接口和高效的性能而在...

    XML的DOM4J的解析方式

    在DOM4J中,解析XML文件主要有以下几个步骤: 1. **导入DOM4J库**:首先,你需要在项目中引入DOM4J库。这通常通过Maven或Gradle的依赖管理工具完成。例如,在Maven的pom.xml文件中添加如下依赖: ```xml ...

    dom4j的jar包,用于解析XML文件

    DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且功能丰富的XML API,提供了包括读取、写入、修改以及查询XML文件在内的多种功能。DOM4J的使用大大简化了Java开发者处理XML文档的过程,使得XML数据的...

Global site tag (gtag.js) - Google Analytics