如何使用 dom4j 添加默认名称 space?
How to add a default name space with dom4j?
我想使用 dom4j 将默认名称 space 添加到 XML 文档的根元素,如以下代码片段所示。使用 dom4j 执行此操作的正确方法是什么?
<?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
生成预期的名称 space:
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
得到一个空字符串作为默认名称space,这不是我想要的:
<?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>
您没有创建文档(根)元素。
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "animals" );
// TODO the rest of your code
最终,您会将文档传递给 XML 作者来编写(保存)文档。此外,来自 Javadoc:
Element addNamespace(java.lang.String prefix, java.lang.String uri)
Adds a namespace to this element for use by its child content
Parameters:
prefix - is the prefix to use, which should not be null or blank
您可以尝试的一件事是创建一个 Namespace
的实例,将空字符串传递给构造函数并改用 Element.add()
方法。 Namespace
的Javadoc没有说明前缀不能为空
方法 Document#addElement
(还有 Element#addElement
)接受第二个参数 namespaceURI
。这就是诀窍,将默认名称空间添加到 XML 元素。
以下代码将产生预期的 XML。
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
有一个重载版本也可以接受 namespaceURI
。 DocumentHelper#createElement
没有这样的重载方法
我想使用 dom4j 将默认名称 space 添加到 XML 文档的根元素,如以下代码片段所示。使用 dom4j 执行此操作的正确方法是什么?
<?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
生成预期的名称 space:
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
得到一个空字符串作为默认名称space,这不是我想要的:
<?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>
您没有创建文档(根)元素。
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "animals" );
// TODO the rest of your code
最终,您会将文档传递给 XML 作者来编写(保存)文档。此外,来自 Javadoc:
Element addNamespace(java.lang.String prefix, java.lang.String uri) Adds a namespace to this element for use by its child content Parameters: prefix - is the prefix to use, which should not be null or blank
您可以尝试的一件事是创建一个 Namespace
的实例,将空字符串传递给构造函数并改用 Element.add()
方法。 Namespace
的Javadoc没有说明前缀不能为空
方法 Document#addElement
(还有 Element#addElement
)接受第二个参数 namespaceURI
。这就是诀窍,将默认名称空间添加到 XML 元素。
以下代码将产生预期的 XML。
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
有一个重载版本也可以接受 namespaceURI
。 DocumentHelper#createElement
没有这样的重载方法