我搜索过,但我没有发现什么能解决我的问题。我希望有人可以帮助我。
我正在构建一个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
。
非常感谢提前。
答案 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