【问题标题】:preventing empty xml elements are converted to self closing elements防止空 xml 元素转换为自闭合元素
【发布时间】:2014-08-31 02:47:55
【问题描述】:

我正在使用 Xerces 库在 document 中编写 XML。为此,我使用 OutputFormat 类在 XMLSerializer 中传递 OutputFormat 的对象。但是我所有的空 xml 元素都转换为自闭合 xml 元素。

我想要这个:

<Company Name="Dummy">
</Company>

但它的到来就像

<Company Name="Dummy" />

我试过下面的代码:

try {
    //print
    OutputFormat format = new OutputFormat(dom,"iso-8859-1",true);          
    //to generate output to console use this serializer

    XMLSerializer serializer = new XMLSerializer(System.out, format);           
    serializer.serialize(dom);

} catch(IOException ie) {
        ie.printStackTrace();
}

有人可以帮我解决这个问题吗?

谢谢,

【问题讨论】:

  • 只是出于好奇,您为什么不想使用缩写语法?
  • 你愿意使用其他库来解决这个问题吗?
  • 你可以看看我是如何通过使用 Jackson 的 XmlMapper 和一些自定义配置来解决这个问题的:stackoverflow.com/a/57527302/1005102

标签: java xml xerces


【解决方案1】:

如果您愿意使用其他 API 来解决问题,请尝试以下操作:

import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stax.StAXResult;

import org.w3c.dom.Document;

public class XmlWritter {

    public static void main(String[] args) throws Exception {
        Document doc = ...
        XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(System.out);
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(doc), new StAXResult(writer));
    }

}

【讨论】:

    【解决方案2】:

    我所知道的大多数序列化程序都不允许您选择是否在输出中使用空元素标签,原因很简单,没有一个理智的 XML 使用者应该关心它们是否被使用。如果您确实在乎,并且没有发疯,这将有助于解释您为什么在乎。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2020-12-06
      • 1970-01-01
      • 2010-12-23
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多