如何使用名称空间前缀创建标记

时间:2015-12-21 11:00:30

标签: java xml dom

我正在尝试为标记添加前缀以表示特定的命名空间 - 如下所示

String envelopePrefix = "omgEnv";
            String businessPrefix = "omgBS";
            String namespaceURI = "http://www.w3.org/2000/xmlns/";

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

            Document doc = docBuilder.newDocument();
            Element rootElement = doc.createElement("OmgeoMessageContainer");

            rootElement.setAttributeNS(namespaceURI, "xmlns:" + envelopePrefix, "http://www.omgeo.com/schema/v1.0/envelope");
            rootElement.setAttributeNS(namespaceURI, "xmlns:" + businessPrefix, "http://www.omgeo.com/schema/v1.0/BusinessServices");

            doc.appendChild(rootElement);

            Element messageParties = doc.createElementNS(namespaceURI, envelopePrefix + ":MessageParties");
            rootElement.appendChild(messageParties);

不幸的是我的messageParties元素失败并出现以下错误 -

  

org.w3c.dom.DOMException:NAMESPACE_ERR:尝试创建   或者以不正确的方式更改对象   命名空间。

您应该如何使用正确的命名空间定义为标记添加前缀?事件setPrefix方法抛出相同的错误。

由于

1 个答案:

答案 0 :(得分:0)

在生成XML时,我认为您不能决定命名空间元素的前缀。我在JavaDocs中没有看到任何这样的选项。要使用命名空间创建元素,这应该是修改。

String namespaceURI = "http://www.w3.org/2000/xmlns/";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.newDocument();
Element rootElement = doc.createElementNS(namespaceURI, "OmgeoMessageContainer");

doc.appendChild(rootElement);
Element messageParties = doc.createElementNS(namespaceURI, "MessageParties");
rootElement.appendChild(messageParties);

这将为名称空间生成带有自动决定前缀的XML。