2

我在 SO 中进行了搜索,但没有发现任何可以解决我的问题的东西。我希望有一个人可以帮助我。

我正在构建一个 XML 文件,我需要删除 Namespace 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

提前谢谢了。

4

2 回答 2

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);
于 2016-04-27T13:14:14.843 回答
0

我为您做了一些代码,我不知道您使用的是什么包...如果您只想从 CstmrCdtTrfInitn 标记中删除 xmlns 属性,请尝试使用此代码作为生成 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();
  }
于 2016-04-27T11:25:24.037 回答