在 Java 中从 XML 中删除 XML 标头

2022-09-01 10:06:23
StringWriter  writer = new StringWriter();
XmlSerializer serializer = new KXmlSerializer();
serializer.setOutput(writer);
serializer.startDocument(null, null);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
// Creating XML

serializer.endDocument();
String xmlString = writer.toString();

在上面的环境中,是否有任何标准 API 可用于删除 XML 标头,或者您是否建议通过字符串操作:<?xml version='1.0' ?>

if (s.startsWith("<?xml ")) {
    s = s.substring(s.indexOf("?>") + 2);
}

希望输出在没有 XML 标头信息 。xmlString<?xml version='1.0' ?>


答案 1

理想情况下,如果需要,您可以进行 API 调用以排除 XML 标头。它似乎不支持这一点(浏览这里的代码)。如果你有一个(或者实际上任何其他实现),你可以用这种方式完成你想要的东西:KXmlSerializerorg.w3c.dom.Documentjavax.xml.transform.Source

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));

否则,如果您必须使用它,则看起来必须操作输出。KXmlSerializer


答案 2

如果使用 JAXP 序列化程序,则可以访问 XSLT 中定义的所有输出属性,例如 。您可以以“身份转换器”的形式获取它,该转换器称为 using,不带任何参数,然后调用 。另一个例子:omit-xml-declaration="yes"transformerFactory.getTransformer()setOutputProperty()

TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty("omit-xml-declaration", "yes"); 

推荐