首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用dom4j添加默认名称空间?

如何使用dom4j添加默认名称空间?
EN

Stack Overflow用户
提问于 2021-03-11 12:05:00
回答 2查看 258关注 0票数 0

我想使用dom4j向XML文档的根元素添加一个默认的名称空间,如下所示。用dom4j做这件事的正确方法是什么?

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<animals xmlns="http://zoo.domain.org/schema/animals" >
    <animal id="1">
        <elephant>
            <name>Jumbo</name>
        </elephant>
    </animal>
</animals>

dom4j API确实提供了Element#addNamespace方法,但是javadoc告诉我们前缀可能不是空的。但是,下面的代码将为animals生成预期的命名空间:

代码语言:javascript
复制
Document document = DocumentHelper.createDocument();
Element animals = document.addElement("animals")
        .addNamespace("", "http://zoo.domain.org/schema/animals");
Element animal = animals.addElement("animal")
        .addAttribute("id", "1");
animal.addElement("elephant")
        .addElement("name")
        .addText("Jumbo");

// write document to file etc.
...

..。但是子元素animal获得一个空字符串作为默认名称空间,这不是我想要的:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<animals xmlns="http://zoo.domain.org/schema/animals">
    <animal xmlns="" id="1">
        <elephant>
            <name>Jumbo</name>
        </elephant>
    </animal>
</animals>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-11 18:49:17

方法Document#addElement (但也包括Element#addElement)接受第二个参数namespaceURI。这起了作用,将默认名称空间添加到XML元素中。

下面的代码将产生预期的XML。

代码语言:javascript
复制
Document document = DocumentHelper.createDocument();
Element animals = document.addElement("animals", "http://zoo.domain.org/schema/animals");
Element animal = animals.addElement("animal")
        .addAttribute("id", "1");
animal.addElement("elephant")
        .addElement("name")
        .addText("Jumbo");

// write document to file etc.
...

还值得一提的是,如果您想在自己的DocumentFactory#createElement上创建一个元素,那么它有一个重载的版本,它也接受一个namespaceURIDocumentHelper#createElement没有这样一个重载的方法。

票数 1
EN

Stack Overflow用户

发布于 2021-03-11 16:29:16

您不是在创建文档(根)元素。

代码语言:javascript
复制
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "animals" );
// TODO the rest of your code

最终,您将把文档传递给XML作者来编写(保存)文档。还来自Javadoc:

元素前缀,java.lang.String uri)向该元素添加一个命名空间,以供其子内容参数使用:前缀-是要使用的前缀,不应该为空或空白

您可以尝试的一件事是创建一个Namespace实例,将一个空字符串传递给构造函数,然后使用Element.add()方法。Namespace的Javadoc并不表示前缀不能为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66582239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档