【问题标题】:Remove the XML header from an XML in Java从 Java 中的 XML 中删除 XML 标头
【发布时间】:2011-08-02 18:05:13
【问题描述】:
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 标头信息&lt;?xml version='1.0' ?&gt;

【问题讨论】:

    标签: java xml


    【解决方案1】:

    理想情况下,如果需要,您可以进行 API 调用以排除 XML 标头。不过,KXmlSerializer 似乎并不支持这一点(略读代码here)。如果你有 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,您将不得不操作输出。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 属性值有一个常量:OutputKeys.OMIT_XML_DECLARATION
      【解决方案3】:

      不要打电话给:

      serializer.startDocument();
      

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

      serializer.endDocument();
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-31
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多