2016-04-27 1 views
1

J'ai cherché dans SO, mais je n'ai rien trouvé qui résout mon problème. J'espère que quelqu'un peut m'aider.Supprimer l'espace de noms de l'étiquette

Je construis un fichier XML et je dois supprimer l'espace de noms xmlns.

C'est mon code

Document xmlDocument = new Document(); 
Namespace ns1 = Namespace.getNamespace("urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"); 
Namespace ns2 = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
Element root = new Element("Document", ns1); 
root.addNamespaceDeclaration(ns2); 
xmlDocument.setRootElement(root); 
Element CstmrCdtTrfInitn = new Element("CstmrCdtTrfInitn"); 
root.addContent(CstmrCdtTrfInitn); 

PrintDocumentHandler pdh = new PrintDocumentHandler(); 
pdh.setXmlDocument(xmlDocument); 
request.getSession(false).setAttribute("pdh", pdh); 

ByteArrayOutputStream sos = new ByteArrayOutputStream(); 
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); 
Format format = outputter.getFormat(); 
format.setEncoding(SOPConstants.ENCODING_SCHEMA); 
outputter.setFormat(format); 
outputter.output(root, sos); 
sos.flush(); 
return sos; 

Et c'est le XML-fichier

<?xml version="1.0" encoding="UTF-8"?> 
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> 
    <CstmrCdtTrfInitn xmlns=""/> 
</Document> 

J'ai créé pour supprimer l'espace de noms xmlns de la balise CstmrCdtTrfInitn.

Merci beaucoup à l'avance.

+0

Sans l'urne 'xmlns = ""' il serait dans l'espace de noms ': iso: std: ISO: 20022: tech: xsd: pain.001.001.03'. Est-ce que c'est ce que tu veux? – Henry

+0

Non, pas l'espace de noms dans la balise Document. Je dois supprimer seulement l'espace de noms de la balise CstmrCdtTrfInitn. – user2960190

+1

Toujours pas clair. Comme le document est actuellement, 'CstmrCdtTrfInitn' n'a pas d'espace de noms. Si vous supprimez l'attribut 'xmlns =" ​​"', cet élément sera dans l'espace de noms 'urn: iso: std: iso: 20022: tech: xsd: pain.001.001.03' qui est hérité de l'élément racine. – Henry

Répondre

2

déclaration namespace sans préfixe (xmlns="...") est connu sous le nom espace de noms par défaut. Notez que, contrairement à l'espace de noms préfixé, les éléments descendants sans préfixe héritent de l'espace de nom par défaut de l'ancêtre implicitement. Ainsi, dans le code XML ci-dessous, <CstmrCdtTrfInitn> est considéré dans l'espace de noms urn:iso:std:iso:20022:tech:xsd:pain.001.001.03:

<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> 
    <CstmrCdtTrfInitn/> 
</Document> 

Si cela est le résultat recherché, au lieu d'essayer d'enlever xmlns="" plus tard, vous devriez essayer de créer CstmrCdtTrfInitn en utilisant le même espace que Document en premier lieu:

Element CstmrCdtTrfInitn = new Element("CstmrCdtTrfInitn", ns1); 
+0

Merci beaucoup. Cela a résolu mon problème ........ – user2960190

0

J'ai fait du code pour vous, je ne sais pas quel paquet vous utilisez ... Si vous voulez seulement enlever l'attribut xmlns de la balise CstmrCdtTrfInitn essayez avec ce code comme autre méthode pour générer du XML (je viens de modifier this):

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

    // root elements 
    Document doc = docBuilder.newDocument(); 
    Element rootElement = doc.createElement("Document"); 
    rootElement.setAttribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"); 
    rootElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 

    doc.appendChild(rootElement); 

    // staff elements 
    Element CstmrCdtTrfInitn = doc.createElement("CstmrCdtTrfInitn"); 
    rootElement.appendChild(CstmrCdtTrfInitn); 


    // write the content into xml file 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 

    // Output to console for testing 
    StreamResult result = new StreamResult(System.out); 

    transformer.transform(source, result); 

    } catch (ParserConfigurationException pce) { 
    pce.printStackTrace(); 
    } catch (TransformerException tfe) { 
    tfe.printStackTrace(); 
    }