删除标记并使用Java更改XML中的行?

时间:2015-09-17 20:40:55

标签: java xml dom xpath sax

我有一个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);
}

1 个答案:

答案 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?