使用Java中的命名空间创建XML文档
我正在寻找可以构造使用命名空间的XML文档的示例Java代码。 我似乎无法使用我喜欢的常用工具找到任何东西,所以希望有人可以帮助我。
我不确定,你想做什么,但我在大多数xml问题中都使用jdom ,它支持名称空间(当然)。
代码:
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);
生成以下xml:
哪个应该包含你需要的一切。 希望有所帮助。
有很多方法可以做到这一点。 只是几个例子:
使用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()); } }
使用W3C DOM的 Java实现
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); } }