我想使用dom4j向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生成预期的命名空间:
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获得一个空字符串作为默认名称空间,这不是我想要的:
<?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>发布于 2021-03-11 18:49:17
方法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没有这样一个重载的方法。
发布于 2021-03-11 16:29:16
您不是在创建文档(根)元素。
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并不表示前缀不能为空。
https://stackoverflow.com/questions/66582239
复制相似问题