Подтвердить что ты не робот

Удаление заголовка XML из XML в 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' ?>.

4b9b3361

Ответ 1

Если вы используете JAXP-сериализатор, вы получаете доступ ко всем свойствам вывода, определенным в XSLT, например omit-xml-declaration="yes". Вы можете получить это в виде "трансформатора идентичности", называемого с помощью transformerFactory.getTransformer() без параметров, по которому вы затем вызываете setOutputProperty().

Ответ 2

В идеале вы можете сделать вызов API для исключения заголовка XML, если хотите. Не похоже, что KXmlSerializer поддерживает это, хотя (skimming через код здесь). Если у вас есть 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, похоже, вам придется манипулировать выходом.

Ответ 3

Не выполняйте вызов:

serializer.startDocument();

Он добавляет заголовок XML, хотя вам нужно позвонить:

serializer.endDocument();

иначе ваш XML будет создан как пустая строка.