我有一个看起来像这样的XML文件(行家pom.xml
如果有人非常熟悉):添加元素到根元素
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
...
</project>
我想补充添加<packaging>
元素,使其看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
</project>
所以我这样做:
doc = (Document)builder.build(modelToWriteTo);
rootProj = doc.getRootElement();
Element packagingTag = rootProj.getChild("packaging");
if(packagingTag != null) {
packagingTag.setText(elementValue);
} else {
packagingTag = new Element("packaging").setText(elementValue);
rootProj.addContent(packagingTag);
}
,以便在出现是一个名为“包装”的子元素,那么我只想重置该值,如果不是那么我想添加一个新的标签。
问题是,当我这样做,我<packaging>
元素来为:
<project>
<packaging xmlns="">pom</packaging>
</project>
所以我读的地方它可能是与命名空间,所以我改变了我的代码:
doc = (Document)builder.build(modelToWriteTo);
rootProj = doc.getRootElement();
Element packagingTag = rootProj.getChild("packaging");
if(packagingTag != null){
packagingTag.setText(elementValue);
} else {
packagingTag = new Element("packaging").setText(elementValue);
packagingTag.setNamespace(rootProj.getNamespace());
rootProj.addContent(packagingTag);
}
和它很好地出现,而不xmlns
属性:
<project>
<packaging>pom</packaging>
</project>
然而,当另一个线程进来再次读取,并找到rootProj.getChild("packaging")
,它返回null
。 因此,另一种尝试修改包装标签导致线程认为它不存在,并增加了产生新的标签:
<project>
<packaging>pom</packaging>
<packaging>pom</packaging>
<packaging>pom</packaging>
</project>
与以前的代码,我没设置的命名空间,它能够检索rootProj.getChild("packaging")
.....
我必须错过这里的东西,但我看不到在哪里。请帮忙!
如果不知道您正在使用哪个XML API,此问题很难回答。 – Dev 2011-12-29 02:50:31
每个标记jdom,但同意它应该是前面和中心:使用JDOM ... – alphazero 2011-12-29 03:01:08