Question

Je dois générer un fichier xml en Java, j'ai donc choisi d'utiliser DOM (jusqu'à ce qu'il y tout est ok), voici la balise racine de ce que je dois créer

<?xml version="1.0" encoding="utf-8"?>
<KeyContainer Version="1.0" xmlns="urn:ietf:params:xml:ns:keyprov:pskc:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xml="http://www.w3.org/XML/1998/namespace">

Voici mon code source

PrintWriter out = new PrintWriter(path);
Document xmldoc = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        DOMImplementation impl = builder.getDOMImplementation();
        Element e = null;
        Node n = null;
        xmldoc = impl.createDocument(null, "KeyContainer", null);
        /* Noeuds non bouclés */
        Element keycontainer = xmldoc.getDocumentElement();
            keycontainer.setAttributeNS(null, "Version", "1.0");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:ds","http://www.w3.org/2000/09/xmldsig#");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xenc", "http://www.w3.org/2001/04/xmlenc#");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xml", "http://www.w3.org/XML/1998/namespace");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "urn:ietf:params:xml:ns:keyprov:pskc:1.0");
/* Non relevant Info*/
DOMSource domSource = new DOMSource(xmldoc);
        StreamResult streamResult = new StreamResult(out);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING,"utf-8");
        serializer.setOutputProperty(OutputKeys.VERSION,"1.0");
        serializer.setOutputProperty(OutputKeys.INDENT,"yes");
        serializer.setOutputProperty(OutputKeys.STANDALONE,"yes");
        serializer.transform(domSource, streamResult); 

Et voici ce que je reçois

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<KeyContainer xmlns="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Version="1.0">

Le problème est la propriété xmlns est vide, et xmlns: xml manque, que puis-je faire pour obtenir toutes les informations

?

Merci une stackoverflow beaucoup

(PS: Got NAMESPACE_ERR si quoi que ce soit d'autre que « http://www.w3.org/ 2000 / xmlns / » dans le champ NamespaceURI)

Était-ce utile?

La solution

Deux choses sont nécessaires pour se débarrasser de xmlns=""

Créer l'URI Document avec l'espace de noms souhaité en tant que tel:

xmldoc = impl.createDocument("urn:ietf:params:xml:ns:keyprov:pskc:1.0", "KeyContainer", null);

Supprimer la ligne suivante comme il est maintenant inutile:

keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "urn:ietf:params:xml:ns:keyprov:pskc:1.0");

En ce qui concerne l'attribut xmlns:xml, l'API est en baisse en silence. Voir la ligne 173 de NamespaceMappings . Un peu de recherche se présente que le comportement de déclarer cet espace particulier est indéfini et n'est pas recommandé.

Autres conseils

Pour prendre connaissance espace de noms DOM, ne pas oublier de l'activer dans le DocumentBuilderFactory en utilisant la méthode setNamespaceAware.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top