【问题标题】:How to modify xml node values using java? (Not by tag name)如何使用java修改xml节点值? (不是标签名称)
【发布时间】:2016-08-18 06:35:03
【问题描述】:

我正在尝试从 java 文件修改 xml 文件的一些参数。在所有帖子中,我发现人们会修改这些参数以通过标签名称搜索它,但在我的情况下它不起作用。

我的 xml 文件的一个例子是:

<?xml version="1.0" encoding="UTF-8"?>
<comp>
    <params>
        <param name="id">1</param>
        <param name="type">aaaa</param>
        <param name="bus">123</param>
    </params>
</comp>

如何通过“名称”访问参数?

最后我的java代码是:

public void modifyXml(){
    String path = "C:\\Workspace\\Project\\data.xml";
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(path);
    Node comp = doc.getFirstChild();
    Node params = doc.getElementsByTagName("params").item(0);
    loadParams(params);
}

private void loadParams(Node params) {
    NodeList list = params.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        Node url =   list.item(i);
        String nodeName = url.getNodeName();
        NamedNodeMap attributes = url.getAttributes();

        //System.out.println(attributes.item(i));
        if (nodeName.equalsIgnoreCase("param") && url.getFirstChild()!=null) {
            ServerProperties.getExternalParamsMap().put(attributes.getNamedItem("name").getNodeValue(), url.getFirstChild().getNodeValue());
            System.out.println((String) url.getFirstChild().getNodeName());
            System.out.println(url.getFirstChild().getNodeValue());
         }
    }
}

它打印节点的值而不是参数名称。参数名称显示如下:“#text”

谢谢!

问候!!

埃里克·P.

【问题讨论】:

  • 不要用 DOM 手写。将 XPath 与以下表达式一起使用://param[@name="id"]//param[@name="type"]//param[@name="bus"] 等。

标签: java xml


【解决方案1】:

你应该使用XPath来简化编码...下面是基于XPath和vtd-xml的代码。

import com.ximpleware.*;

public class accessName {

    public static void main(String[] args) throws VTDException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false))
            return;
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/param[@name='id']/text()");
        int i=0;
        while((i=ap.evalXPath())!=-1){
            System.out.println("text value "+vn.toString(i));
        }
    }
}

【讨论】:

    【解决方案2】:

    现在它对我有用:

        String path = "C:\\Workspace\\Project\\data.xml";
        File file = new File(path);
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
                .newInstance();
        javax.xml.parsers.DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse(file);
        Node id = (Node) document.getElementsByTagName("param").item(0);
        id.setTextContent("xxxxxxx");
        System.out.println(usr.getTextContent());
    

    这将修改“id”参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多