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

zzuqiang 发布于 2013/12/03 18:35
阅读 471
收藏 0
现在遇到了一个非常棘手的问题:在创建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> 




谢谢大家指点!!!希望得到大家的帮助!
加载中
0
打一把
打一把

这个问题我也遇到了。求解。


有一个比较笨的办法。就是把所有text为空的元素的text处设置一个特殊的字符串,生成了XML之后,用空字符串替换之。

不晓得DOM4J的api里是否可以直接设置。找了好久了,google、百度都不知道答案!

zzuqiang
zzuqiang
回复 @Sprieo : 谢谢你的热心回答我会尝试的。
打一把
打一把
回复 @zzuqiang : 是的,是的啊~你可以试试~
zzuqiang
zzuqiang
回复 @Sprieo : 你说的是不是DOM4J的API
打一把
打一把
我说的这个方法也不是我首先想到的,是这个地方的老外说的:http://www.coderanch.com/t/486330/XML/empty-xml-element-changed-output
打一把
打一把
前几天又查了下API并做了下测试,发现使用: doc.getRootElement().asXML(); 获取到的是展开的XML,也就是你想要的那种类型。 希望可以帮到你。呵呵。
下一页
0
悠悠然然
悠悠然然
dom4j开源的,不行就改
悠悠然然
悠悠然然
一样,java也有源码的。
zzuqiang
zzuqiang
没有使用dom4j,仅仅通过java的DomAPI创建
返回顶部
顶部