首页 > 解决方案 > JAVA,如何在 xml 中编辑节点内的文本?

问题描述

所以假设我有当前的 XML 文件。

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <apps>
        <app name="app1">
            <url>someUrl</url>
            <username>user1</username>
            <password>qwerty123</password>
        </app>
        <app name="app2">
            <url>someUrl</url>
            <username>user2</username>
            <password>asdasdasd</password>
        </app>
        <app name="app3">
            <url>someUrl</url>
            <username>user3</username>
            <password>123456789</password>
        </app>
    </apps>
</config>

我已经广泛搜索了如何将第一个密码(qwerty123)编辑为其他密码,然后保存文件,但我找不到合适的解决方案。

这里有人知道我该怎么做吗?

标签: javaxml

解决方案


使用 DOM 解析器的示例解决方案:

        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<config>\n" +
                "    <apps>\n" +
                "        <app name=\"app1\">\n" +
                "            <url>someUrl</url>\n" +
                "            <username>user1</username>\n" +
                "            <password>qwerty123</password>\n" +
                "        </app>\n" +
                "        <app name=\"app2\">\n" +
                "            <url>someUrl</url>\n" +
                "            <username>user2</username>\n" +
                "            <password>asdasdasd</password>\n" +
                "        </app>\n" +
                "        <app name=\"app3\">\n" +
                "            <url>someUrl</url>\n" +
                "            <username>user3</username>\n" +
                "            <password>123456789</password>\n" +
                "        </app>\n" +
                "    </apps>\n" +
                "</config>";
//here use your InputStream for example from file
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());


        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(inputStream);
        doc.getDocumentElement().normalize();

        doc.getElementsByTagName("password").item(0).getFirstChild().setNodeValue("new content");
//here use your outputStream for example file output stream
        OutputStream outputStream = new ByteArrayOutputStream();
        Source xmlSource = new DOMSource(doc);
        Result outputTarget = new StreamResult(outputStream);
        TransformerFactory.newInstance().newTransformer()
          .transform(xmlSource, outputTarget);
//when you replace output stream with file output stream remove this, as this line is only for debugging 
        System.out.println(new String(((ByteArrayOutputStream) outputStream).toByteArray()));

推荐阅读