我有一個看起來像這樣的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