我有一个XML,我需要使用Java从中删除一个完整的标记。截至目前,该标记没有具体位置,它可以位于client
标记内的任何位置。
<xml>
<client id="100" version="2">
<!-- some stuff here -->
<derta-config>
<!-- some stuff here -->
</derta-config>
<!-- some stuff here -->
<!-- some stuff here -->
</client>
我需要从上面的XML中完全删除此<derta-config>
标记。还有一件事。在同一个XML文件中,我只有一行<hello>collect_model = 1</hello>
的实例。 world
块下方可以是任意位置,也可以嵌套在其他world
块中。它也会在client
标记内,但也可能有其他嵌套。
<world>
<world>
<world>
<world>
<hello>collect_model = 1</hello>
<hello>enable_data = 0</hello>
<hello>session_ms = 1000</hello>
<hello>max_collect = string_integer($extract("max_collect"))</hello>
<hello>max_collect = parenting(max_collect, max_collect, 100)</hello>
<hello>output('{')</hello>
</world>
</world>
</world>
</world>
我需要在同一个<hello>collect_model = 0</hello>
块中创建这样的行:world
。因此,我的最终XML不会超过<derta-config>
标记,而collect_model
将为0
<world>
<world>
<world>
<world>
<hello>collect_model = 0</hello>
<hello>enable_data = 0</hello>
<hello>session_ms = 1000</hello>
<hello>max_collect = string_integer($extract("max_collect"))</hello>
<hello>max_collect = parenting(max_collect, max_collect, 100)</hello>
<hello>output('{')</hello>
</world>
</world>
</world>
</world>
以下是我的代码,我不知道如何删除这些内容?
File fileName = new File("file example");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(fileName);
更新: -
File fileName = new File("file example");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(fileName);
NodeList configTag = document.getElementsByTagName("derta-config");
for (int i = 0; i < configTag.getLength(); i++) {
Node node = configTag.item(i);
System.out.println(node.getNodeName());
node.getParentNode().removeChild(node);
}
答案 0 :(得分:2)
接下来你打电话给document.getElementsByTagName("derta-config")
,迭代列表(应该是一长,对吧?),并使用node.getParentNode().removeChild(node)
。
之后,您拨打document.getElementsByTagName("hello")
,重复列表,使用node.getTextContent()
检查文字内容,如果是您想要更改的值,则使用node.setTextContent(newValue)
进行更改。
然后将结果保存回文件。见How to save parsed and changed DOM document in xml file?