2009-02-09 9 views

risposta

14

Non sono sicuro, cosa stai cercando di fare, ma io uso jdom per la maggior parte dei miei problemi con xml e supporta gli spazi dei nomi (ovviamente).

Il codice:

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 il seguente codice 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> 

che dovrebbe contenere tutto il necessario. Spero possa aiutare.

20

Ci sono diversi modi per farlo. Solo un paio di esempi:

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

Utilizzo di Java Attuazione 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); 
    } 
} 
+1

E se vuoi nome di un elemento con il prefisso (usando XOM), è sufficiente chiamare nuovo elemento ("prefisso : elemento "," urna: example.namespace "); –