1

无论如何将 DOM Parser Empty 表示法从短格式更改为长格式?

我需要

 <book></book>

而不是书

<book/>

我们有一个第三方 XML 阅读器,它不能使用短符号。我所有的 XML 对象都是 DOM。最好的方法是什么?

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(XMLFile);
transformer.transform(source, result);

谢谢

4

2 回答 2

2

好吧,这是一个猜测:在转换器上将输出属性设置为“html”可能会这样做,因为 html 无法识别短路空标签(我认为)。

transformer.setOutputProperty(OutputKeys.METHOD, "html");

注意:未经测试!

更新:

我刚刚验证它有效。这个片段:

String xml = "<root><a/></root>";
Document doc = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder()
    .parse(new ByteArrayInputStream(xml.getBytes()));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.METHOD, "html");
t.transform(new DOMSource(doc), new StreamResult(System.out));

产生这个输出:

<root>
<a></a>
</root>
于 2013-01-07T23:40:57.863 回答
1

我有同样的问题。这是获得该结果的功能。

public static String fixClosedTag(String rawXml){

    LinkedList<String[]> listTags = new LinkedList<String[]>(); 
    String splittato[] =  rawXml.split("<");

    String prettyXML="";

    int counter = 0;
    for(int x=0;x<splittato.length;x++){
        String tmpStr = splittato[x];
        int indiceEnd = tmpStr.indexOf("/>");
        if(indiceEnd>-1){
            String nameTag = tmpStr.substring(0, (indiceEnd));
            String oldTag = "<"+ nameTag +"/>";
            String newTag = "<"+ nameTag +"></"+ nameTag +">";
            String tag[]=new String [2];
            tag[0] = oldTag;
            tag[1] = newTag;
            listTags.add(tag);
        }
    }
    prettyXML = rawXml;

    for(int y=0;y<listTags.size();y++){
        String el[] = listTags.get(y);

        prettyXML = prettyXML.replaceAll(el[0],el[1]);
    }

    return prettyXML;
}
于 2016-09-30T14:21:25.690 回答