gpt4 book ai didi

java - 添加一个元素到根元素

转载 作者:行者123 更新时间:2023-11-30 04:55:35 24 4
gpt4 key购买 nike

我有一个看起来像这样的 XML 文件(maven 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”的子元素,那么我只想重置该值,如果没有,那么我想添加一个新标签。

问题是当我这样做时我的 <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") ......

我一定错过了这里的一些东西,但我不知道在哪里。请帮忙!

最佳答案

您需要使用Element.getChild(String, Namespace)方法的版本并传递正确的命名空间(在本例中为http://maven.apache.org/POM/4.0.0)。

关于java - 添加一个元素到根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com