Java XML removeChild不工作?
您好,我已经查找了很多这个问题,但我找不到有效的解决方案。我基本上是要删除“job”节点,如第7行中声明的和第13行中删除的。存在0个运行时错误,但未删除节点Java XML removeChild不工作?,java,xml,dom,Java,Xml,Dom,您好,我已经查找了很多这个问题,但我找不到有效的解决方案。我基本上是要删除“job”节点,如第7行中声明的和第13行中删除的。存在0个运行时错误,但未删除节点 NodeList rootNodes = xml.getElementsByTagName("jobs"); Node rootNode = rootNodes.item(0); Element rootElement = (Element) rootNode; NodeList jobsL
NodeList rootNodes = xml.getElementsByTagName("jobs");
Node rootNode = rootNodes.item(0);
Element rootElement = (Element) rootNode;
NodeList jobsList = rootElement.getElementsByTagName("job");
for (int i = 0; i < jobsList.getLength(); i++) {
Node job = jobsList.item(i);
Element jobElement = (Element) job;
if(jobElement.getAttribute("id").equals(
msgEvent.getMessage().getContentRaw().split(" ")[2]))
{
rootNode.removeChild(job);
msgEvent.getChannel().sendMessage("Removed Job " + jobElement.getAttribute("id") + " (Summary: '" + jobElement.getAttribute("summary") + "')").complete();
}
}
nodelistrootnodes=xml.getElementsByTagName(“作业”);
节点rootNode=rootNodes.item(0);
元素rootElement=(元素)rootNode;
NodeList jobsList=rootElement.getElementsByTagName(“作业”);
对于(int i=0;i
这里是XML
<?xml version = "1.0"?>
<jobs>
<job payment = "50000" poster="171048434529337344" collect = "asdf" id = "1" summary="asdfd" expires="5/10/18"> </job>
<job payment = "10000" poster="171048434529337344" collect = "asdf" id = "2" summary="asdf" expires="5/10/18"> </job>
</jobs>
由于这太大,无法评论,下面是我的测试代码和结果:
public static void main(String[] args) {
try (InputStream is = Files.newInputStream(Paths.get("C://Temp/xx.xml"))) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document xml = builder.parse(new InputSource(is));
NodeList rootNodes = xml.getElementsByTagName("jobs");
Node rootNode = rootNodes.item(0);
Element rootElement = (Element) rootNode;
NodeList jobsList = rootElement.getElementsByTagName("job");
System.out.println("list before removal");
for (int i = 0; i < jobsList.getLength(); i++) {
Node job = jobsList.item(i);
Element jobElement = (Element) job;
System.out.println(jobElement.getAttribute("id"));
}
for (int i = 0; i < jobsList.getLength(); i++) {
Node job = jobsList.item(i);
Element jobElement = (Element) job;
if (jobElement.getAttribute("id").equals("1")) {
rootNode.removeChild(job);
}
}
System.out.println("list after removal");
jobsList = rootElement.getElementsByTagName("job");
for (int i = 0; i < jobsList.getLength(); i++) {
Node job = jobsList.item(i);
Element jobElement = (Element) job;
System.out.println(jobElement.getAttribute("id"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
您如何知道节点没有被删除?我尝试了你的代码,但节点确实被删除了。当然,也就是说,如果
msgEvent
包含列表中的id,那么我可以肯定if语句确实通过了,因为sendMessage发生了。但是,它实际上似乎并没有从运行时或XML文件中删除节点。您是否将XML写回该文件?删除操作仅在内存中进行
list before removal
1
2
list after removal
2