`

dom4j使用的一些问题

    博客分类:
  • java
阅读更多

 

1. 在dom4j里,直接在root element上addNamespace是无法成功的,因为是默认的,所以prefix必须给空字符串,结果导致了root的直接子结点都产生了xmlns=""的属性

诸如:

<root xmlns="http://wangf.javaeedev.com">
    <blog xmln="">
		<aticles>...</aticles>
	</blog>
	<forum xmlns="">
		<topics>...</topics>
	</forum>
</root>
  这个可以通过在构造rootElement的时候指定,具体为什么,我想什么时候看看源码???

Element root = maindoc.addElement("root", "http://asialee.javaeeye.com")


2. XSD文件的解析,本来XSD应该是一个特殊的XML,它应该是可以通过XML的方式进行解析的,但是是有问题的.

<SchemaTypes xmlns="http://asialee.javaeeye.com">
	<SchemaType>
		<xsd:schema attributeFormDefault="unqualified"
			elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
			<xsd:element name="Status">
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="ValidData" />
						<xsd:enumeration value="InvalidData" />
						<xsd:enumeration value="Accept" />
						<xsd:enumeration value="BadCredit" />
						<xsd:enumeration value="OverLimit" />
						<xsd:enumeration value="BadDataFormat" />
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:schema>
	</SchemaType>
</SchemaTypes>
 

 

SAXReader reader = new SAXReader();
Document document = reader.read(xmlFile);

Element rootElement = document.getRootElement();
Element schemaType = rootElement.element("SchemaType");

Element xsdElement = (Element)schemaType.elements().get(0);
System.out.println(xsdElement.asXML());

 

 

dom4j会将elementname识别成xsd:schema,然后再增加一层xsd,返回的xml就变成了xsd:xsd:schema,这个现在还没有找到好的解决办法,我使用的是


replaceAll("\\<xsd:", "<")

.replaceAll("</xsd:", "</")

.replaceAll("xmlns:xsd=\"\"", "")


感觉太恶心了,但是现在只能先这么实现着


还有dom4j好像解析xsd文件比较困难,我实在不想再找另外一个库,然后就先这么实现着,等以后研究了源码再看看.

 

3. Dom 节点 Atrribute 的顺序问题

    dom4j里面的attributes方法返回的是一个List<Attribute>这个比较好,是一个定义顺序。但dom里面的getAttributes()返回的是NamedNodeMap 它按照Attribute的名字,按字典序排序了,这个地方我比较赞dom4j

4. Dom4j里面的Node的transformer是不行了,只能整个document进行转换

     来看下javax.xml.transform.Transformer里面的接口

transform(Source xmlSource, Result outputTarget)

   但是dom4j只提供了DocumentSource,它是继承javax.xml.transform.dom.Source的再来看看DocumentSource的构造函数,我们传递一个node,它还是得到它的document,这 个来说,如果想要对某个Node进行transform,就显得没有什么好的办法了.


 

 public DocumentSource(Node node) {
        setDocument(node.getDocument());
    }
	 public DocumentSource(Document document) {
        setDocument(document);
    }

 


5. dom4j里面提供了SAXReader和DomReader,这个方式就是既可以用dom也可以使用

   sax来进行读取,但是如果用dom的形式,如果要进行xml的validation,就显得不太好弄了.

 

    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
	builderFactory.setFeature("http://apache.org/xml/features/continue-after-fatal-error",true);
	DocumentBuilder builder = null;

	if(isValidationON){
		builderFactory.setFeature("http://xml.org/sax/features/validation",true);
		builderFactory.setFeature("http://apache.org/xml/features/validation/schema",true);
		
		builder = builderFactory.newDocumentBuilder();
		builder.setEntityResolver(new MyDefaultEntityResolver());
	} else {
		builder = builderFactory.newDocumentBuilder();
	}
	builder.setErrorHandler(new MyDefaultParsingErrors());
 


   是因为feature要设置再builderFactory里面,然后entityRelver要设置再builder上面。这样就显得特别别扭。因为DocumentBuilder,底层有一个DomParser,但是对外并没有提供获得它的方法,不知道有没有别的什么办法来获得它.

分享到:
评论

相关推荐

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    DOM4J 的使用

    DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。...了解并掌握DOM4J的使用,对于任何涉及XML的Java开发者来说都是非常有价值的技能。

    dom4j_dom4j1.6.1安装包_

    总之,DOM4J 1.6.1是一个功能强大且广泛使用的XML处理库,它的Maven集成使得在Java项目中使用变得方便。无论是创建XML文档、查询XML结构还是进行XML数据操作,DOM4J都能提供简洁、高效的API。在安装和使用过程中,...

    DOM4J帮助文档及使用教程

    12. **常见问题与解决方案**:列举了一些在使用DOM4J过程中可能会遇到的问题及其解决方法。 通过阅读和实践DOM4J的帮助文档和使用教程,开发者可以全面掌握DOM4J的各种特性和用法,从而更高效地处理XML数据。这个...

    dom4j dom4j dom4j dom4j

    尽管DOM4J功能强大,但在某些特定情况下,如需要高度优化的性能或内存使用,可能需要考虑其他XML处理库,如StAX(Streaming API for XML)或VTD-XML。不过对于大多数常规XML处理任务,DOM4J已经足够胜任,并且由于其...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    这个标签直接关联了DOM4J库的核心文件,表明讨论的内容与DOM4J的使用和特性有关。 **文件名称列表:xml** 这个列表只包含了一个条目"xml",可能意味着压缩包中包含的是与XML相关的文件或资源,可能是XML示例文件、...

    dom4j-2.1.3.zip

    "dom4j-2.1.3-javadoc.jar"文件则包含了DOM4J库的API文档,是开发者学习和使用DOM4J的重要参考资料。通过这个文件,我们可以查找类、接口、方法的详细说明,理解它们的功能和使用方式,这对于开发过程中快速定位问题...

    dom4j dom4j1.6 dom4j最新版

    通过理解并熟练使用DOM4J,开发者可以更高效地处理XML相关的任务,提高代码的可维护性和可读性。同时,由于其开源和社区活跃,DOM4J还拥有丰富的文档和社区支持,遇到问题时可以方便地找到解决方案。

    XSD使用dom4j校验XML

    1. 加载XSD文件:使用DOM4J的DocumentHelper类的parse方法,传入XSD文件的路径,得到一个SchemaFactory对象。 ```java SchemaFactory schemaFactory = DocumentHelper.createSchema(new File("path_to_xsd_file.xsd...

    dom4j使用简介

    **DOM4J使用简介** DOM4J 是一个强大的 Java 库,专为处理 XML 文档而设计。它提供了丰富的 API,使得在 Java 中解析、创建、修改 XML 文件变得简单高效。DOM4J 不仅支持 DOM(文档对象模型)和 SAX(简单API for ...

    dom4j-2.0.3.zip

    DOM4J的2.0.3版本修复了一些已知问题,提升了稳定性,同时保持了对XML规范的良好支持。 二、核心概念 1. **Element**: DOM4J中的Element类代表XML文档中的元素节点,它是DOM4J中最重要的类。通过Element,我们可以...

    dom4j使用教程+dom4j.jar

    **DOM4J使用教程** DOM4J是一款非常优秀的Java XML API,它提供了全面而强大的功能,包括XML的解析、创建、修改以及查询等操作。在Java世界中,DOM4J因其简单易用和高效性而备受青睐。这篇教程将深入探讨DOM4J的...

    所有版本的dom4j工具包

    标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...

    dom4j 2.1.1

    2. 性能优异:相比其他XML解析库,DOM4J在处理大规模XML文档时表现出更好的性能,因为它采用了一些优化策略,如延迟加载(lazy loading),避免一次性加载整个文档导致的内存消耗。 3. 功能强大:DOM4J不仅支持基本...

    dom4j所依赖的所有jar包

    DOM4J则是基于DOM的一种轻量级API,它弥补了DOM的一些不足,比如性能问题和内存消耗。DOM4J通过提供SAX(Simple API for XML)和DOM的接口,使开发者可以选择更适合他们应用场景的方法来处理XML。 在DOM4J 1.6.1中...

    dom4j的Java工程

    在"dom4jdemo"这个子文件夹中,很可能是包含了一个或多个Java源代码文件,演示了如何使用DOM4J进行XML操作的实例。这些代码通常会包含导入DOM4J库的语句,如`import org.dom4j.Document;`和`import org.dom4j....

    dom4j使用手册

    dom4j使用手册;

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

    2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...

Global site tag (gtag.js) - Google Analytics