繁体   English   中英

从 Java 中的 XML 中删除 XML 标头

[英]Remove the XML header from an XML in Java

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);
}

想要xmlString没有 XML 标头信息的输出<?xml version='1.0' ?>

理想情况下,您可以根据需要进行 API 调用以排除 XML 标头。 虽然KXmlSerializer似乎不支持这一点(浏览此处的代码)。 如果您有org.w3c.dom.Document (或实际上javax.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则看起来您必须操作输出。

如果您使用 JAXP 序列化程序,您可以访问 XSLT 中定义的所有输出属性,例如omit-xml-declaration="yes" 您可以以“身份转换器”的形式获得它,使用没有参数的transformerFactory.getTransformer()调用,然后在其上调用setOutputProperty() 另一个例子:

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

不要打电话给:

serializer.startDocument();

它添加了 XML 标头,但您需要调用:

serializer.endDocument();

否则您的 XML 将被创建为一个空白字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM