从标记中删除命名空间

时间:2016-04-27 10:17:56

标签: java xml element default-namespace

我搜索过,但我没有发现什么能解决我的问题。我希望有人可以帮助我。

我正在构建一个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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我为你做了一些代码,我不知道你正在使用什么包......如果你只想从CstmrCdtTrfInitn标签中删除xmlns属性,请尝试使用此代码作为生成XML的其他方法(我刚刚修改了{{ 3}}):

this