如何在Java中使用Jdom更改xml内部节点的值

Sat*_*esh 1 java xml jdom

-我已经参照此链接试图用JDOM的帮助下改变XML值http://www.mkyong.com/java/how-to-modify-xml-file-in-java-jdom/

样本中显示的xml:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <staff id="1">
    <firstname>yong</firstname>
    <lastname>mook kim</lastname>
    <nickname>mkyong</nickname>
    <salary>5000</salary>
  </staff>
</company>
Run Code Online (Sandbox Code Playgroud)

我不清楚如何处理以下xml场景:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <staff>
    <firstname>yong</firstname>
    <lastname>mook kim</lastname>
    <nickname>mkyong</nickname>
    <salary>
        <basic>1000</basic>
        <hra>150</hra>
   </salary>
  </staff>
  <staff>
    <firstname>sanjay</firstname>
    <lastname>machani</lastname>
    <nickname>chong</nickname>
    <salary>
        <basic>2000</basic>
        <hra>200</hra>
   </salary>
  </staff>
</company>
Run Code Online (Sandbox Code Playgroud)

我的职员标签不会有身份证,我也会有薪水的孩子标签。但是我需要使用Java在xml中更改sanjay(firstname)的薪水。

任何的意见都将会有帮助。

小智 5

如果您使用的是JDOM,则可以使用以下方法遍历元素:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

    public class yourClass{
    public static void main(String[] args) {

        File xml = new File("yourFile.xml");
        try {
            Document doc = (Document) new SAXBuilder().build(xml);
            Element rootNode = doc.getRootElement();
            List list = rootNode.getChildren("staff");
            XMLOutputter xmlOut = new XMLOutputter();

            for (int i = 0; i < list.size(); i++) {

                Element node = (Element) list.get(i);
                if (node.getChildText("firstname").equals("sanjay"))
                    node.getChild("salary").getChild("basic").setText("250000");
                xmlOut.setFormat(Format.getPrettyFormat());
                xmlOut.output(doc, new FileWriter("yourFile.xml"));
            }
        } catch (IOException io) {
            System.out.println(io.getMessage());
        } catch (JDOMException jdomex) {
            System.out.println(jdomex.getMessage());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)