在Java中更改XML文件中的一个值的最佳方法是什么?

yar*_*art 12 java xml xslt jdom

我有一个XML文件,我知道我需要更改其值的节点名称.

节点名是ipAddress.

我可以使用JDOM,获取文档,获取节点并更改值并编写它,或者我可以编写XSLT文件.

代码更改值来自Java,所以我的问题是哪个选项更好?XML文件的大小可以不同.

另一个与XSLT相关的问题:是否有可能编写一个XSLT文件,这样我就不会列出所有XML格式的节点,只会指定类似的节点if node == ipAddress,然后获取新值,以及如何从Java应用XSLT转换?

谢谢.

bdo*_*han 6

您可以使用标准的org.w3c.dom API来获取DOM.然后使用标准的javax.xml.xpath API获取节点.然后使用javax.xml.transform API将其写回.

就像是:

import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        Document document = dbf.newDocumentBuilder().parse(new File("input.xml"));

        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();
        XPathExpression expression = xpath.compile("//A/B[C/E/text()=13]");

        Node b13Node = (Node) expression.evaluate(document, XPathConstants.NODE);
        b13Node.getParentNode().removeChild(b13Node);

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        t.transform(new DOMSource(document), new StreamResult(System.out));
    }
}
Run Code Online (Sandbox Code Playgroud)