studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código crear con avanzado aplicaciones java xml namespaces xmldocument xom

java - reales - libro de android studio en español pdf



Crear un documento XML usando espacios de nombres en Java (2)

Estoy buscando, por ejemplo, código Java que pueda construir un documento XML que use espacios de nombres. Parece que no puedo encontrar nada usando mi herramienta favorita normal , así que esperaba que alguien pudiera ayudarme.


Hay varias formas de hacer esto. Solo un par de ejemplos:

Usando XOM

import nu.xom.Document; import nu.xom.Element; public class XomTest { public static void main(String[] args) { XomTest xomTest = new XomTest(); xomTest.testXmlDocumentWithNamespaces(); } private void testXmlDocumentWithNamespaces() { Element root = new Element("my:example", "urn:example.namespace"); Document document = new Document(root); Element element = new Element("element", "http://another.namespace"); root.appendChild(element); System.out.print(document.toXML()); } }

Usando la implementación de Java del W3C DOM

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.ls.DOMImplementationLS; import org.w3c.dom.ls.LSOutput; import org.w3c.dom.ls.LSSerializer; public class DomTest { private static DocumentBuilderFactory dbf = DocumentBuilderFactory .newInstance(); public static void main(String[] args) throws Exception { DomTest domTest = new DomTest(); domTest.testXmlDocumentWithNamespaces(); } public void testXmlDocumentWithNamespaces() throws Exception { DocumentBuilder db = dbf.newDocumentBuilder(); DOMImplementation domImpl = db.getDOMImplementation(); Document document = buildExampleDocumentWithNamespaces(domImpl); serialize(domImpl, document); } private Document buildExampleDocumentWithNamespaces( DOMImplementation domImpl) { Document document = domImpl.createDocument("urn:example.namespace", "my:example", null); Element element = document.createElementNS("http://another.namespace", "element"); document.getDocumentElement().appendChild(element); return document; } private void serialize(DOMImplementation domImpl, Document document) { DOMImplementationLS ls = (DOMImplementationLS) domImpl; LSSerializer lss = ls.createLSSerializer(); LSOutput lso = ls.createLSOutput(); lso.setByteStream(System.out); lss.write(document, lso); } }


No estoy seguro de lo que intenta hacer, pero utilizo jdom para la mayoría de mis problemas xml y admite espacios de nombres (por supuesto).

El código:

Document doc = new Document(); Namespace sNS = Namespace.getNamespace("someNS", "someNamespace"); Element element = new Element("SomeElement", sNS); element.setAttribute("someKey", "someValue", Namespace.getNamespace("someONS", "someOtherNamespace")); Element element2 = new Element("SomeElement", Namespace.getNamespace("someNS", "someNamespace")); element2.setAttribute("someKey", "someValue", sNS); element.addContent(element2); doc.addContent(element);

produce el siguiente xml:

<?xml version="1.0" encoding="UTF-8"?> <someNS:SomeElement xmlns:someNS="someNamespace" xmlns:someONS="someOtherNamespace" someONS:someKey="someValue"> <someNS:SomeElement someNS:someKey="someValue" /> </someNS:SomeElement>

Que debería contener todo lo que necesitas. Espero que ayude.