`

jdom读写xml 小心xml中的namespace

    博客分类:
  • XML
XML 
阅读更多

一,没有namespace的情况:

一个src/studentinfo.xml的xml文件放在src目录下:文件中的<!--student-info xmlns="http://www.jdom.org"-->是xml中的注释,没有用。

<?xml version="1.0" encoding="gb2312"?>

<!--student-info xmlns="http://www.jdom.org"-->
<student-info>
    <student>
        <number>001</number>
        <name>lnman</name>
        <age>24</age>
    </student>
</student-info>

 java的读:

import java.util.Iterator;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;

public class ReadXml2Namespace {

	public static void main(String[] args) throws Exception {
		SAXBuilder builder = new SAXBuilder();
		Document read_doc = builder.build("src/studentinfo.xml");
		Element root = read_doc.getRootElement();

		System.out.println("---------STUDENT--------------");
		for(Iterator<Element> itr= root.getChildren().iterator(); itr.hasNext();) {
			Element e = itr.next();
			System.out.println(e.getChildText("number"));
			System.out.println(e.getChildText("name"));
			System.out.println(e.getChildText("age"));
			
//			Namespace ns = Namespace.getNamespace("http://www.jdom.org");
//			System.out.println(e.getChildText("number", ns));
//			System.out.println(e.getChildText("name", ns));
//			System.out.println(e.getChildText("age", ns));
		}
		System.out.println("------------------------------");

	}
}

 运行后结果为:

---------STUDENT--------------
001
lnman
24
------------------------------

 

二,有namespace的xml

改一下前面的xml文件:

<?xml version="1.0" encoding="gb2312"?>

<student-info xmlns="http://www.jdom.org">
<!--student-info-->
    <student>
        <number>001</number>
        <name>lnman</name>
        <age>24</age>
    </student>
</student-info>

 

这样运行的结果为:

---------STUDENT--------------
null
null
null
------------------------------

 

修改前面的java程序:

import java.util.Iterator;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;

public class ReadXml2Namespace {

	public static void main(String[] args) throws Exception {
		SAXBuilder builder = new SAXBuilder();
		Document read_doc = builder.build("src/studentinfo.xml");
		Element root = read_doc.getRootElement();

		System.out.println("---------STUDENT--------------");
		for(Iterator<Element> itr= root.getChildren().iterator(); itr.hasNext();) {
			Element e = itr.next();
//			System.out.println(e.getChildText("number"));
//			System.out.println(e.getChildText("name"));
//			System.out.println(e.getChildText("age"));
			
			Namespace ns = Namespace.getNamespace("http://www.jdom.org");
			System.out.println(e.getChildText("number", ns));
			System.out.println(e.getChildText("name", ns));
			System.out.println(e.getChildText("age", ns));
		}
		System.out.println("------------------------------");

	}
}

 就好了:

---------STUDENT--------------
001
lnman
24
------------------------------

 

Jdom的Api:http://www.jdom.org

getChild(String, Namespace) - Method in class org.jdom.Element
This returns the first child element within this element with the given local name and belonging to the given namespace.
getChild(String) - Method in class org.jdom.Element
This returns the first child element within this element with the given local name and belonging to no namespace.
getChildren() - Method in class org.jdom.Element
This returns a List of all the child elements nested directly (one level deep) within this element, as Element objects.
getChildren(String) - Method in class org.jdom.Element
This returns a List of all the child elements nested directly (one level deep) within this element with the given local name and belonging to no namespace, returned as Element objects.
getChildren(String, Namespace) - Method in class org.jdom.Element
This returns a List of all the child elements nested directly (one level deep) within this element with the given local name and belonging to the given Namespace, returned as Element objects.
getChildText(String) - Method in class org.jdom.Element
Returns the textual content of the named child element, or null if there's no such child.
getChildText(String, Namespace) - Method in class org.jdom.Element
Returns the textual content of the named child element, or null if there's no such child.

总结:

就是要小心xml的namespace。

分享到:
评论

相关推荐

    使用JDOM解析XML文件

    在实际开发中,我们还需要注意处理XML文档的命名空间(Namespace),JDOM提供了Namespace类来处理这一问题。例如: ```java Namespace ns = Namespace.getNamespace("prefix", "uri"); Element root = new Element...

    Java生成xml(jdom)

    Java生成XML是Java编程中常见的任务,特别是在处理数据序列化或与外部系统交换结构化信息时。本教程将深入探讨如何使用JDOM库在Java中生成...通过熟练掌握JDOM,开发者可以高效地在Java应用程序中实现XML的读写功能。

    JDOM解析XML文档

    ### JDOM解析XML文档 #### 一、JDOM概述与特点 ...通过本文对JDOM基本结构、类和方法的介绍,相信读者已经对如何使用JDOM有了初步的认识。接下来的文章将进一步深入探讨如何在实际项目中应用JDOM。

    Jdom解析xml文件

    总的来说,JDOM是Java开发者处理XML文件的一种强大工具,尤其适合需要频繁读写和操作XML文档的场景。通过JDOM,开发者可以方便地创建、解析和修改XML文档,提高开发效率。在实际项目中,可以根据需求和性能考虑选择...

    JDOM-XML解析技术

    - **本地化支持**:JDOM内建对Java的I18N(国际化)支持,处理XML文档中的字符编码和语言特性更为方便。 - **XML Schema支持**:JDOM支持XML Schema验证,可以确保XML文档符合预定义的规范。 ### 3. JDOM的基本操作...

    java,用jdom操作xml-创建,修改

    Java中的JDOM库是一个强大的工具,用于处理XML文档的创建、读取和修改。XML(eXtensible Markup Language)是一种被广泛应用于数据交换和存储的标记语言,它具有结构化和可扩展的特点。JDOM是Java的一个API,设计...

    jdom1.1.src

    在实际开发中,JDOM1.1的源码学习有助于我们理解XML处理的底层逻辑,提升对XML操作的灵活性和效率。例如,了解`AttrListImpl`类如何维护元素的属性集合,`Namespace`类如何处理命名空间,以及`ContentList`接口如何...

    XML及jdom解析

    JDOM提供了对XML文档的高效、方便的访问方式,使得开发者可以轻松地读取、创建和修改XML文档。JDOM基于SAX(Simple API for XML)和DOM(Document Object Model)解析器,但比DOM更轻量级,比SAX更面向对象。 以下...

    jdom源代码,包含jdom.jar

    在Java编程中,JDOM是处理XML数据的一种常见选择,因为它将XML文档表示为一系列的Java对象,使得开发者可以使用熟悉的Java API来操作XML。 **JDOM的基本结构:** JDOM的核心类包括Element(元素)、Attribute(属性...

    JDOM(java)使用详解及实例

    JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。 JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和...

    jdom的源代码文档

    深入JDOM的源代码,我们能看到它对XML事件的处理,如解析和序列化过程中的事件监听。例如,`org.jdom.event`包下的`ContentHandler`和`LexicalHandler`接口,以及对应的实现类,它们在解析XML时扮演了关键角色。 ...

    jdom 1.1 包

    JDOM 1.1通过提供对XML文档结构的直接映射,使得XML处理变得更加直观。开发者可以利用JDOM构建XML文档对象模型,然后通过这个模型进行读写操作,而无需深入理解底层的DOM或SAX解析机制。 JDOM的核心概念包括Element...

    JDOM v1.0 API

    JDOM的目标是提供一个高效、便捷、纯Java的XML处理库,使得开发者能更容易地读写XML数据。在本文中,我们将深入探讨JDOM的核心概念、主要功能以及如何在实际开发中应用它。 ### JDOM的基本概念 1. **Element(元素...

    用JODM读写XML的源代码

    通过这种方式,你可以使用JDOM轻松地对XML进行读写操作。不过需要注意的是,处理大型XML文档时,应考虑性能优化,如使用SAX或StAX解析器来避免加载整个文档到内存。此外,JDOM提供了丰富的API,可以实现更复杂的XML...

    jdom-1.1.1包

    **JDOM库详解** ...总结来说,JDOM是Java程序员处理XML文档的强大工具,它简化了XML的读写过程,提供了丰富的API,并且在性能和兼容性上有所保障。通过JDOM 1.1.1,开发者可以更高效地进行XML相关的开发工作。

    Jdom.rar下载

    4. **`org.jdom.Namespace`**:管理命名空间,允许在XML文档中正确地引用带有前缀的元素和属性。 5. **`org.jdom.Content`**:这是一个接口,表示XML文档中的内容,包括元素、文本、注释等。 **三、使用JDOM解析...

    JDOM v1.1 API

    JDOM v1.1 API是Java程序员处理XML文档的强大工具,其简洁的API设计使得XML的读写变得更加直观。虽然有更新的版本如JDOM2可用,但v1.1依然在许多项目中发挥着作用,尤其对于那些不需要最新特性的项目而言。了解并...

    jdom-1.1.2

    《JDOM 1.1.2:XML处理的利器...尽管后续版本有新的改进,但JDOM 1.1.2依然在许多项目中发挥着重要作用,尤其是对于那些对性能和内存管理有严格要求的场景。了解并熟练掌握JDOM,无疑会提升你在XML处理方面的专业技能。

    jdom英文帮助文档

    8. **XPath支持**:JDOM提供对XPath表达式的支持,可以方便地查找、选择XML文档中的特定部分。 9. **事件驱动解析(Event-Based Parsing)**:JDOM支持SAX解析,允许通过事件处理器来处理XML数据,降低内存占用。 ...

    JDom API(CHM)

    **JDom API(中文版)** JDom,全称为Java Document Model,是一个用纯Java编写的XML处理库。它的设计目标是提供一个高效、灵活且易于使用...而JDom则更适合那些对XML处理有基本需求,且对性能要求不那么苛刻的项目。

Global site tag (gtag.js) - Google Analytics