0 0

DOM创建xml文档如何处理空标记问题5

现在遇到了一个非常棘手的问题在创建xml报文发送给系统处理时系统只认类似如下的xml标记:
<stream></stream>
而不认识
<stream/>
标记。在xml中都是空标记可是变态的系统部人遇到就报错。我使用dom生成的xml文档如何才能生成
<stream></stream>
标记呢?希望得到大家的帮忙。这是我的代码:
package com.tp.test;

import java.io.ByteArrayOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * 
 * <p>Title: DomCreateXml.java</p>
 * 
 * <p>Description: </p>
 * 
 * <p>Date: Dec 3, 2013</p>
 * 
 * <p>Time: 6:24:54 PM</p>
 * 
 * <p>Copyright: Copyright (c) 2013</p>
 * 
 * <p>Company: zhongpin</p>
 * 
 * @author zhangyq
 * @version 2.0
 * 
 * <p>============================================</p>
 * <p>Modification History
 * <p>Mender: </p>
 * <p>Date: </p>
 * <p>Reason: </p>
 * <p>============================================</p>
 */
public class DomCreateXml {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory localDocumentBuilderFactory = DocumentBuilderFactory
				.newInstance();
		DocumentBuilder localDocumentBuilder = localDocumentBuilderFactory
				.newDocumentBuilder();
		Document localDocument = localDocumentBuilder.newDocument();
		
		Element rootEle = localDocument.createElement("stream");
		
		localDocument.appendChild(rootEle);
		System.out.println(xmlDoc(localDocument));
		

	}
	private static String xmlDoc(Document document)throws Exception{
		//首先创建转化工厂

		TransformerFactory transFactory=TransformerFactory.newInstance();

		//创建Transformer,它能够将源树转换为结果树

		Transformer transformer = transFactory.newTransformer();

		//接下来设置输出属性

		transformer.setOutputProperty("indent", "yes");

		DOMSource source =new DOMSource(document);
		StreamResult result = new StreamResult();


		//1.将XML字符串输出到String字符串中
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		result.setOutputStream(baos);
		
		transformer.transform(source, result);//后,
        
		return   baos.toString();
	}

}

输出的结果为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<stream/>
我想要的结果为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<stream></stream>

谢谢大家指点!!!
2013年12月03日 18:27

1个答案 按时间排序 按投票排序

0 0

在代码54行添加以下代码:

rootEle.appendChild(localDocument.createTextNode(""));




具体代码如下:
package com.tp.test;

import java.io.ByteArrayOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.TypeInfo;
import org.w3c.dom.UserDataHandler;

/**
 * 
 * <p>Title: DomCreateXml.java</p>
 * 
 * <p>Description: </p>
 * 
 * <p>Date: Dec 3, 2013</p>
 * 
 * <p>Time: 6:24:54 PM</p>
 * 
 * <p>Copyright: Copyright (c) 2013</p>
 * 
 * <p>Company: zhongpin</p>
 * 
 * @author zhangyq
 * @version 2.0
 * 
 * <p>============================================</p>
 * <p>Modification History
 * <p>Mender: </p>
 * <p>Date: </p>
 * <p>Reason: </p>
 * <p>============================================</p>
 */
public class DomCreateXml {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory localDocumentBuilderFactory = DocumentBuilderFactory
				.newInstance();
		DocumentBuilder localDocumentBuilder = localDocumentBuilderFactory
				.newDocumentBuilder();
		Document localDocument = localDocumentBuilder.newDocument();
		Element rootEle = localDocument.createElement("stream");
		localDocument.appendChild(rootEle);
//		Element memberList = localDocument.createElement("m");  
		rootEle.appendChild(localDocument.createTextNode(""));
		System.out.println(xmlDoc(localDocument));
		

	}
	private static String xmlDoc(Document document)throws Exception{
		//首先创建转化工厂

		TransformerFactory transFactory=TransformerFactory.newInstance();

		//创建Transformer,它能够将源树转换为结果树

		Transformer transformer = transFactory.newTransformer();

		//接下来设置输出属性

		transformer.setOutputProperty("indent", "yes");

		DOMSource source =new DOMSource(document);
		StreamResult result = new StreamResult();


		//1.将XML字符串输出到String字符串中
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		result.setOutputStream(baos);
		
		transformer.transform(source, result);//后,
        
		return   baos.toString();
	}

}


最后运行结果:
<?xml version="1.0" encoding="UTF-8"?>
<stream></stream>

2013年12月18日 16:36

相关推荐

    dom动态生成使用XML DOM生成XML.pdf

    为了解决这一问题,微软推出了XML DOM(Document Object Model for XML),这是一种用于处理XML文档的强大工具。 #### 二、XML DOM概述 XML DOM 是一个用于处理XML文档的标准对象模型。它提供了一组API...

    DOM读取XML文件

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便、直观,但缺点是占用内存较大,不适用于处理大型XML文件。 首先,我们需要了解XML的...

    DOM解析XML文件例子

    在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...

    用dom解析xml文件

    在处理XML文件时,DOM解析器会将整个XML文档加载到内存中,形成一个完整的节点树,这样我们就可以通过这个树来查找、修改或遍历XML数据。 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输结构...

    DOM解析xml文件实例讲解

    在Android开发中,DOM(Document Object Model)解析是处理XML文档的一种常见方法,它提供了一种结构化的表示XML文档的方式,并允许开发者通过编程接口与XML数据进行交互。本篇文章将深入探讨DOM解析XML文件在...

    ASP DOM生成XML

    - 它提供了一系列API来处理XML文档,包括解析、查询、修改等操作。 - MSXML兼容性好,可以在各种Windows环境中运行。 - **XML与Web开发的关系:** - XML作为一种数据交换格式,在Web服务、配置文件、元数据等...

    用DOM读写XML文件

    XML(eXtensible Markup Language)是一种用于标记数据的语言...总的来说,DOM是处理XML文档的强大工具,它允许我们方便地读取、修改和写入XML数据。通过熟练掌握DOM API,开发者可以更高效地进行XML数据的处理和操作。

    使用dom4j 和本地dom 解析xml 文件

    DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一部分。这种方式适合小型XML文件,因为大型文件会消耗大量内存。在Java中,DOM解析主要通过`javax.xml.parsers....

    DOM解析XML应用实例(入门经典案例)

    DOM(Document Object Model)是XML文档的一种解析标准,它提供了一种结构化的表示XML文档的方式,使得开发者可以方便地访问和操作XML文档的各个部分。本教程“DOM解析XML应用实例(入门经典案例)”旨在帮助初学者...

    Java创建xml文档笔记(DOM,DOM4J)

    本笔记将深入探讨如何使用DOM(文档对象模型)和DOM4J库来创建XML文档。 一、DOM解析器 DOM是W3C推荐的一种XML解析标准,它将整个XML文档加载到内存中,形成一棵树形结构,称为DOM树。通过DOM,我们可以方便地访问...

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    利用DOM读写XML

    在处理XML时,DOM(Document Object Model)是一种常用的方法,它将XML文档解析为一个树形结构,使得我们可以方便地访问和修改XML文档的每一个部分。 DOM模型的核心是DOMDocument对象,它是整个XML文档的根节点,...

    xml文件处理程序

    本主题主要关注如何处理XML文件,包括对其进行增、删、改、查操作,并手动创建树形结构以生成XML文件。 一、XML文件的基本结构 XML文件由一系列的元素构成,每个元素都有开始标签和结束标签,如 `&lt;element&gt;` 和 `...

    XML解析之DOM

    通过解析和操作这个XML文件,我们可以学习到如何使用DOM解析器读取、修改XML文档,并了解其在实际项目中的应用,比如配置文件的读写、数据交换等场景。 总之,DOM作为XML解析的一种方法,提供了强大且灵活的数据...

    Dom4j解析和生成XML文档

    生成XML文档时,DOM4J允许我们通过创建`Element`、`Attribute`等对象,构建一个内存中的XML结构,然后将其转换为XML字符串或写入文件。 1. 创建`Document`对象:`Document document = DocumentFactory.getInstance...

    dom遍历所有xml节点,并且重新生成xml

    在本主题“DOM遍历所有XML节点,并且重新生成XML”中,我们将深入探讨如何利用DOM API遍历XML文档的所有节点,并根据需求重新构建XML文档。 首先,让我们了解XML的基本结构。XML(eXtensible Markup Language)是一...

    xml.rar_DOM_XML DOM_dom xml_xml

    3. **解析XML**:解析器读取XML文档并创建DOM树。例如,JavaScript中使用`document.implementation.createDocument()`方法或`DOMParser`对象来解析XML。 4. **访问节点**:使用DOM API,可以通过节点名称、索引或...

    sax,dom解析xml和生产xml文件

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件以及文档存储等领域。本文将深入探讨两种主要的XML解析方法——SAX(Simple API for XML)和DOM(Document Object Model...

Global site tag (gtag.js) - Google Analytics