Да, можно сделать в значительной степени все со встроенными библиотеками. Сделайте поиск, здесь ища теги [python]
и [email]
, и Вы будете видеть, как он сделан.
Предполагая, что вы хотите придерживаться стандартного API ...
Вы можете использовать DOMImplementationLS :
Document document = node.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document
.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String str = serializer.writeToString(node);
Если Xml version = "1.0" encoding = "UTF-16"?> объявление вас беспокоит, вы можете использовать вместо него преобразователь :
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node),
new StreamResult(buffer));
String str = buffer.toString();
Если у вас есть схема XML или вы можете иным образом создать для нее привязки JAXB, вы можете использовать JAXB Marshaller для записи в System.out:
import javax.xml.bind.*;
import javax.xml.bind.annotation.*;
import javax.xml.namespace.QName;
@XmlRootElement
public class BoundClass {
@XmlAttribute
private String test;
@XmlElement
private int x;
public BoundClass() {}
public BoundClass(String test) {
this.test = test;
}
public static void main(String[] args) throws Exception {
JAXBContext jxbc = JAXBContext.newInstance(BoundClass.class);
Marshaller marshaller = jxbc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(new JAXBElement(new QName("root"),BoundClass.class,new Main("test")),System.out);
}
}
Не поддерживается в стандартном API JAXP, я использовал для этой цели библиотеку JDom. Он имеет функцию принтера, параметры форматирования и т. Д. http://www.jdom.org/