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 :


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)

Class diagram

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

Related posts

To top of page