Java : LSSerializer (XML) con ejemplos
LSSerializer (Java SE 22 & JDK 22) en Java con ejemplos.
Encontrará ejemplos de código en la mayoría de los métodos de LSSerializer.
Nota :
- Este artículo puede utilizar software de traducción para su comodidad. Consulte también la versión original en inglés.
Summary
Un LSSerializer proporciona una API para serializar (escribir) un documento DOM en formato XML. Los datos XML se escriben en una cadena o en un flujo de salida. Los cambios o correcciones que se realicen durante la serialización afectan únicamente a los datos serializados. El objeto Document y sus elementos secundarios nunca se ven alterados por la operación de serialización. (Traducción automática)
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa "bbb">
]>
<root>&aaa;</root>
""";
final var factory = DocumentBuilderFactory.newInstance();
factory.setExpandEntityReferences(false);
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var serializer = ls.createLSSerializer();
final var str = serializer.writeToString(document);
System.out.println(str);
// Result
// ↓
//<?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root [
//<!ENTITY aaa 'bbb'>
//]>
//<root>&aaa;</root>
}
Methods
DOMConfiguration getDomConfig ()
El objeto DOMConfiguration utilizado por LSSerializer al serializar un nodo DOM. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var serializer = ls.createLSSerializer();
final var domConfig = serializer.getDomConfig();
final var names = domConfig.getParameterNames();
for (int i = 0; i < names.getLength(); i++) {
final var name = names.item(i);
final var param = domConfig.getParameter(name);
System.out.println(name + " : " + param);
}
// Result
// ↓
//canonical-form : false
//cdata-sections : true
//check-character-normalization : false
//comments : true
//datatype-normalization : false
//element-content-whitespace : true
//entities : true
//infoset : false
//namespaces : true
//namespace-declarations : true
//split-cdata-sections : true
//validate : false
//validate-if-schema : false
//well-formed : true
//discard-default-content : true
//format-pretty-print : false
//ignore-unknown-character-denormalizations : true
//xml-declaration : true
//http://www.oracle.com/xml/jaxp/properties/isStandalone : false
//jdk.xml.isStandalone : false
//error-handler : null
}
LSSerializerFilter getFilter ()
Cuando la aplicación proporciona un filtro, el serializador llamará al filtro antes de serializar cada nodo. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var xml = """
<root>
<child><aaa/><bbb/><ccc/></child>
</root>
""";
final var input = ls.createLSInput();
input.setStringData(xml);
final var parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
final var document = parser.parse(input);
final var serializer = ls.createLSSerializer();
System.out.println(serializer.getFilter()); // null
//<?xml version="1.0" encoding="UTF-16"?><root>
// <child><aaa/><bbb/><ccc/></child>
//</root>
System.out.println(serializer.writeToString(document));
final var filter = new LSSerializerFilter() {
@Override
public short acceptNode(Node n) {
System.out.println("acceptNode : " + n);
if (n.getNodeName().equals("bbb")) {
return NodeFilter.FILTER_REJECT;
} else {
return NodeFilter.FILTER_ACCEPT;
}
}
@Override
public int getWhatToShow() {
return NodeFilter.SHOW_ELEMENT;
}
};
serializer.setFilter(filter);
System.out.println(filter == serializer.getFilter()); // true
System.out.println("-- write start --");
final var ret = serializer.writeToString(document);
System.out.println("-- write end --");
System.out.println(ret);
// Result
// ↓
//-- write start --
//acceptNode : [root: null]
//acceptNode : [child: null]
//acceptNode : [aaa: null]
//acceptNode : [aaa: null]
//acceptNode : [bbb: null]
//acceptNode : [bbb: null]
//acceptNode : [ccc: null]
//acceptNode : [ccc: null]
//acceptNode : [child: null]
//acceptNode : [root: null]
//-- write end --
//<?xml version="1.0" encoding="UTF-16"?><root>
// <child><aaa/><ccc/></child>
//</root>
}
String getNewLine ()
La secuencia de caracteres de final de línea que se utilizará en el XML que se está escribiendo. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var serializer = ls.createLSSerializer();
final var ret1 = serializer.getNewLine();
System.out.println(Arrays.toString(ret1.getBytes())); // [10]
System.out.println(ret1.equals("\n")); // true
serializer.setNewLine("\r\n");
final var ret2 = serializer.getNewLine();
System.out.println(Arrays.toString(ret2.getBytes())); // [13, 10]
System.out.println(ret2.equals("\r\n")); // true
}
void setFilter (LSSerializerFilter filter)
Cuando la aplicación proporciona un filtro, el serializador llamará al filtro antes de serializar cada nodo. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var xml = """
<root>
<child><aaa/><bbb/><ccc/></child>
</root>
""";
final var input = ls.createLSInput();
input.setStringData(xml);
final var parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
final var document = parser.parse(input);
final var serializer = ls.createLSSerializer();
System.out.println(serializer.getFilter()); // null
//<?xml version="1.0" encoding="UTF-16"?><root>
// <child><aaa/><bbb/><ccc/></child>
//</root>
System.out.println(serializer.writeToString(document));
final var filter = new LSSerializerFilter() {
@Override
public short acceptNode(Node n) {
System.out.println("acceptNode : " + n);
if (n.getNodeName().equals("bbb")) {
return NodeFilter.FILTER_REJECT;
} else {
return NodeFilter.FILTER_ACCEPT;
}
}
@Override
public int getWhatToShow() {
return NodeFilter.SHOW_ELEMENT;
}
};
serializer.setFilter(filter);
System.out.println(filter == serializer.getFilter()); // true
System.out.println("-- write start --");
final var ret = serializer.writeToString(document);
System.out.println("-- write end --");
System.out.println(ret);
// Result
// ↓
//-- write start --
//acceptNode : [root: null]
//acceptNode : [child: null]
//acceptNode : [aaa: null]
//acceptNode : [aaa: null]
//acceptNode : [bbb: null]
//acceptNode : [bbb: null]
//acceptNode : [ccc: null]
//acceptNode : [ccc: null]
//acceptNode : [child: null]
//acceptNode : [root: null]
//-- write end --
//<?xml version="1.0" encoding="UTF-16"?><root>
// <child><aaa/><ccc/></child>
//</root>
}
void setNewLine (String newLine)
La secuencia de caracteres de final de línea que se utilizará en el XML que se está escribiendo. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var serializer = ls.createLSSerializer();
final var ret1 = serializer.getNewLine();
System.out.println(Arrays.toString(ret1.getBytes())); // [10]
System.out.println(ret1.equals("\n")); // true
serializer.setNewLine("\r\n");
final var ret2 = serializer.getNewLine();
System.out.println(Arrays.toString(ret2.getBytes())); // [13, 10]
System.out.println(ret2.equals("\r\n")); // true
}
boolean write (Node nodeArg, LSOutput destination)
Serialice el nodo especificado como se describe arriba en la descripción general de la interfaz LSSerializer. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var document = builder.newDocument();
final var root = document.createElement("root");
document.appendChild(root);
final var text = document.createTextNode("abcd");
root.appendChild(text);
final var path = Path.of("R:", "java-work", "sample.xml");
System.out.println(path); // R:\java-work\sample.xml
try (final var writer = Files.newBufferedWriter(path)) {
final var destination = ls.createLSOutput();
destination.setCharacterStream(writer);
final var serializer = ls.createLSSerializer();
final var ret = serializer.write(document, destination);
System.out.println(ret); // true
}
//<?xml version="1.0" encoding="UTF-8"?><root>abcd</root>
System.out.println(Files.readString(path));
}
String writeToString (Node nodeArg)
Serialice el nodo especificado como se describe arriba en la descripción general de la interfaz LSSerializer. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var document = builder.newDocument();
final var root = document.createElement("root");
document.appendChild(root);
final var text = document.createTextNode("abcd");
root.appendChild(text);
final var serializer = ls.createLSSerializer();
final var str = serializer.writeToString(document);
//<?xml version="1.0" encoding="UTF-16"?><root>abcd</root>
System.out.println(str);
}
boolean writeToURI (Node nodeArg, String uri)
Un método de conveniencia que actúa como si se llamara a LSSerializer.write con un LSOutput sin codificación especificada y LSOutput.systemId establecido en el argumento uri. (Traducción automática)
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();
final var feature = domImpl.getFeature("LS", "3.0");
if (feature instanceof DOMImplementationLS ls) {
final var document = builder.newDocument();
final var root = document.createElement("root");
document.appendChild(root);
final var text = document.createTextNode("abcd");
root.appendChild(text);
final var path = Path.of("R:", "java-work", "sample.xml");
System.out.println(path); // R:\java-work\sample.xml
final var uri = path.toUri();
System.out.println(uri); // file:///R:/java-work/sample.xml
final var serializer = ls.createLSSerializer();
final var ret = serializer.writeToURI(document, uri.toString());
System.out.println(ret); // true
//<?xml version="1.0" encoding="UTF-8"?><root>abcd</root>
System.out.println(Files.readString(path));
}