【问题标题】:how to append a new value in xml using java?如何使用java在xml中追加一个新值?
【发布时间】:2010-10-25 10:32:25
【问题描述】:

我有一个类似的字符串:

       String msg=
      <?xml version="1.0" encoding="UTF-8" standalone="no">
      <validateEmail>
      <emailid>abc@gmail.com</emailid>
      <instanceid>instance1</instanceid>
      <msgname>validatemsg</msgname>
      <taskid>task1</taskid>
      </validateEmail>

我如何能够将此字符串转换为 xml 文件并附加一个新节点。

谢谢

【问题讨论】:

    标签: java xml


    【解决方案1】:

    此代码将您的字符串转换为 XML 文档,添加一个新节点,然后将其打印为字符串,以便您检查它是否正确。

    public void xml() throws ParserConfigurationException, SAXException, IOException {
        String msg = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
        msg += "<validateEmail><emailid>abc@gmail.com</emailid><instanceid>instance1</instanceid>";
        msg += "<msgname>validatemsg</msgname><taskid>task1</taskid></validateEmail>";
    
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
    
        Document doc = builder.parse(new ByteArrayInputStream(msg.getBytes()));
    
        Node newNode = doc.createElement("newnode");
        newNode.setTextContent("value");
        Node root = doc.getFirstChild();
        root.appendChild(newNode);
    
        try {
            DOMSource domSource = new DOMSource(doc);
            StringWriter writer = new StringWriter();
            StreamResult result = new StreamResult(writer);
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            transformer.transform(domSource, result);
            System.out.println(writer.toString());
        } catch (TransformerException ex) {
            ex.printStackTrace();
        }
    }
    

    【讨论】:

      【解决方案2】:

      首先创建一个代表您的 XML 的 DOM(文档对象模型)对象。

      byte[] xmlBytes = msg.getBytes("UTF-8");
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document doc = db.parse(new ByteArrayInputStream(xmlBytes));
      

      然后你需要将你的新节点添加到它:

      Element newNode = doc.createElement("myNode");
      newNode.setTextContent("contents of node");
      Element root = doc.getDocumentElement(); // the <validateEmail>
      root.appendChild(newNode);
      

      如果我理解正确,那么你想将它写入文件系统。

      File outputFile = ...;
      Source source = new DOMSource(doc);
      Result result = new StreamResult(outputFile);
      Transformer xformer = TransformerFactory.newInstance().newTransformer();
      xformer.transform(source, result);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多