这是我的xml文档:
<definitions>
<task name="TASK1"
class="CLASS"
group="GROUP">
<trigger count="3" interval="400"/>
<property xmlns:task="URI"
name="PROPERTY2"
value="VALUE1"/>
<property xmlns:task="URI"
name="PROPERTY2"
value="VALUE2"/>
</task>
<task name="TASK1"
class="CLASS"
group="GROUP">
<trigger count="1" interval="600"/>
<property xmlns:task="URI"
name="PROPERTY2"
value="VALUE1"/>
<property xmlns:task="URI"
name="PROPERTY2"
value="VALUE2"/>
</task>
<another_tag name="a_name"/>
<another_tag2 name="a_name2"/>
<another_tag3> something in the middle </another_tag3>
</definitions>
我必须删除所有<代码>
Document esb = new Document();
SAXBuilder saxBuilder = new SAXBuilder();
try {
esb = saxBuilder.build(new File("C:\\...path\\file.xml"));
}
catch (JDOMException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
Element root = esb.getRootElement();
boolean b = root.removeChild("task");
System.out.println(b);
我不明白如何在没有的情况下获取xml文件
我通过管理名称空间解决了这个问题。代码如下:`
Document doc = new Document();
SAXBuilder saxBuilder = new SAXBuilder();
try {
doc = saxBuilder.build(new File("....path\MyXMLfile.xml"));
}
catch (JDOMException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
Element root = esb.getRootElement();
System.out.println(root.getName()); // it prints "definitions"
Namespace namespace = Namespace.getNamespace("task","http://....myDefinitionsNamespace....");
boolean b = root.removeChildren("task", namespace);
System.out.println(b);
XMLOutputter xmlOutputter = new XMLOutputter();
xmlOutputter.setFormat(Format.getPrettyFormat());
System.out.println(xmlOutputter.outputString(doc)); //so we can see new XML FILE
为了理解这段代码,我们还需要启动xml:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://....myDefinitionsNamespace....">
<task name="MyTask"
class="....myClass...."
group="....myGroup....">
<taskChild/>
</task>
<anotherTag1/>
<anotherTag2>
<task/>
.
.
.
</definitions>
结果是一个没有每个任务标记的XML文件,它将只包含另一个标记。然后需要定义输出(例如,将输出定义到具有FileOutputStream实例的文件中)。感谢“OkieOth”和“rolfl”。
除了OkieOth所说的之外,您只删除了第一个任务。
另一个问题是您没有将JDOM再次写入文件。您需要保存现有文件以查看更改。
如果要将更改应用回文件,请考虑以下事项:
SAXBuilder saxBuilder = new SAXBuilder();
try {
Document esb = saxBuilder.build(new File("C:\\...path\\file.xml"));
Element root = esb.getRootElement();
boolean b = root.removeChild("task");
System.out.println(b);
XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
try (OutputStream os = new FileOutputStream("C:\\...path\\file.xml")) {
xout.output(os, esb)
}
}
catch (JDOMException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
api对函数“removeChild”这样说:。。。这将删除具有给定本地名称且不属于任何命名空间的第一个子元素(一层深)。。。
removeChild函数只删除一个子级。因此,如果要删除具有特定名称的所有子对象,则需要使用循环。如果函数调用找不到具有所需名称的节点,则返回false。
如果我使用您的示例xml,远程儿童的第三次调用返回为false。因此以下代码将删除所有任务儿童
...
boolean b = root.removeChild("task");
while (b)
b = root.removeChild("task");
...
我正在尝试从xml文件中删除元素和子元素。特别是附加名称Testlog。 首先这是我的xml文件的外观。 以下是我的java代码: 我想删除此appender的所有内容,但引发了一个异常。可能是我错过了一些简单的东西。 有什么想法吗?
问题内容: 我已经从Excel数据库中生成了一个xml文件,它自动包含一个名为“ ” 的元素。为了使新文件符合我的需求,我想使用java删除此元素。这是xml内容: 我编写了一个代码来读取(使用缓冲的读取器)并将内容写入新文件中,并在以下情况下使用该条件: 但这不起作用 问题答案: 我个人建议使用适当的XML解析器(如Java DOM)来检查和删除您的节点,而不是将XML作为原始对象处理(糟糕)。
这是我的XML文件 我只想从xml中删除第二个选项 我的java代码从我的选项元素中删除所有选项。使用
问题内容: Python 3.2.5 x64 ElementTree 我有需要使用python格式化的数据。本质上,我具有包含元素和子元素的文件。我需要删除其中一些元素的子元素。我已经检查了先前的问题,但无法解决。到目前为止,我拥有的最好的功能只是删除了每个第二子元素。 样本数据: 我需要的输出看起来像: 我有一段时间没有写任何东西了,我的代码也没用。我可以解析文件,然后将其写入,但我无法正确处理
问题内容: AFAIK有两种方法: 遍历集合的副本 使用实际集合的迭代器 例如, 和 是否有任何理由偏爱一种方法(例如,出于可读性的简单原因而偏爱第一种方法)? 问题答案: 让我举几个例子,并提出一些避免方案。 假设我们有以下藏书 收集并删除 第一种技术是收集所有要删除的对象(例如,使用增强的for循环),并在完成迭代后删除所有找到的对象。 假设你要执行的操作是“删除”。 如果要“添加”此方法也可
问题内容: 有什么快速(好看的)方法可以从Java中的数组中删除元素? 问题答案: 你可以使用的。