2009-02-09 10 views

Répondre

14

Je ne suis pas sûr, ce que vous essayez de faire, mais j'utilise jdom pour la plupart de mes problèmes xml et il prend en charge les espaces de noms (bien sûr).

Le code:

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

produit le code XML suivant:

<?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> 

qui devrait contenir tout ce dont vous avez besoin. J'espère que cela pourra aider.

20

Il y a plusieurs façons de procéder. Juste quelques exemples:

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

Utilisation de Java Mise en œuvre de 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

Et si vous voulez nom de l'élément avec le préfixe (en utilisant XOM), il suffit d'appeler nouvel élément ("préfixe : element "," urn: example.namespace "); –