Удалить пространство имен из тега
Я искал в SO, но я не нашел ничего, что решает мою проблему. Я надеюсь, что кто-то может помочь мне.
Я строю файл XML, и мне нужно удалить пространство имен xmlns
,
Это мой код
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;
И это созданный XML-файл
<?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>
Я должен удалить пространство имен xmlns
из тега CstmrCdtTrfInitn
,
Спасибо заранее.
2 ответа
Объявление пространства имен без префикса (xmlns="..."
) известен как пространство имен по умолчанию. Обратите внимание, что, в отличие от префиксного пространства имен, элементы-потомки без префикса неявно наследуют пространство имен по умолчанию предка. Итак, в XML ниже, <CstmrCdtTrfInitn>
считается в пространстве имен 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>
Если это желаемый результат, вместо того, чтобы пытаться удалить xmlns=""
позже вы должны попытаться создать CstmrCdtTrfInitn
используя то же пространство имен, что и Document
на первом месте:
Element CstmrCdtTrfInitn = new Element("CstmrCdtTrfInitn", ns1);
Я сделал некоторый код для вас, я не знаю, какой пакет вы используете... Если вы хотите удалить только атрибут xmlns из тега CstmrCdtTrfInitn, попробуйте использовать этот код в качестве другого метода для генерации XML (я только что изменил это):
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();
}