【发布时间】: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 序列化器通常不能满足关于序列化的任意规范。 (我指的是信息科学意义上的“任意”,而不是“随机”的意思。)