【问题标题】:How to remove standalone attribute declaration in xml document?如何删除 xml 文档中的独立属性声明?
【发布时间】:2012-01-16 07:25:43
【问题描述】:

我目前正在使用 Java 创建一个 xml,然后将其转换为字符串。 xml声明如下:

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
doc.setXmlVersion("1.0");

为了将文档转换为字符串,我包含以下声明:

TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
trans.setOutputProperty(OutputKeys.VERSION, "1.0");
trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
trans.setOutputProperty(OutputKeys.INDENT, "yes");

然后我进行转换:

StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();

问题是,在 XML 声明属性中,包含了独立属性,我不希望这样,但我希望出现版本和编码属性:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

有没有可以指定的属性?

【问题讨论】:

  • 出于好奇,为什么要摆脱standalone="no"?毕竟缺少standalone属性相当于standalone="no":“如果没有外部标记声明,独立文档声明没有意义。如果有外部标记声明但没有独立文档声明,则值假定为“否”。” w3.org/TR/REC-xml/#sec-rmd
  • 因为我目前正在开发一个应该生成电子发票的系统。为了生成发票,我需要创建一个 xml,它应该遵循 SAT(在墨西哥)所做的规范。如果不遵守规范,发票将失效。
  • 说明 XML 文档必须符合某种格式约定的规范,即超出 XML 信息模型内容的规范,需要后处理。 XML 序列化器通常不能满足关于序列化的任意规范。 (我指的是信息科学意义上的“任意”,而不是“随机”的意思。)

标签: java xml dom


【解决方案1】:

根据我的阅读,您可以通过在创建DOMSource 之前在Document 上调用以下方法来做到这一点:

doc.setXmlStandalone(true); //before creating the DOMSource

如果你设置它false 你无法控制它是否出现。所以setXmlStandalone(true)Document。在变压器中,如果您想要输出,请使用 OutputKeys 与您需要的任何“是”或“否”。如果您在Document 上使用setXmlStandalone(false),则无论您在Transformer 中设置什么(如果设置),您的输出都将始终为standalone="no"

阅读thread in this forum

【讨论】:

  • 在 Windows 7 上使用 Sun Java 1.6.0_35 时,我仍然在输出中得到 Standalone="no"
  • 你也可以设置transformer的属性-OutputKeys.STANDALONE为true
  • @JanHruby 应该设置为“是”
  • @Pangea 它可以工作,但是当我这样做时,它不再在序言之后打印换行符了!
  • transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "");导致序言后添加新行
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多