如何在Java中构建XML信息集

时间:2011-10-18 06:38:59

标签: java xml

我知道java可以解析xml文件并获取数据但我也想知道如何使用java创建xml节点/节点并插入值。

文件: myXML.xml

<parent>
    <start> 
       <id> 123 </id>
       <name> s1 </name>
       <value> hello </value>
    </start>
</parent>

我希望每次都需要插入数据时创建这些节点<id> <name> and <value> 。假如我要保存 id =“456”,name =“s2”,value =“world”

文件: myXML.xml

<parent>
    <start> 
        <id> 123 </id>
        <name> s1 </name>
        <value> hello </value>
    </start>

    <start> 
        <id> 456 </id>
        <name> s2 </name>
        <value> world </value>
    </start>
</parent>

请使用java&amp;如果我需要使用dtd

3 个答案:

答案 0 :(得分:2)

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

public class Sample {
  public static void main (String[] args) {
    try {
      //Read and Parse 
      DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = dbfactory.newDocumentBuilder();
      Document doc = builder.parse(new File("MyXml.xml"));

      Element root = doc.getDocumentElement();
      //Add Element
      Element element_start = doc.createElement("start");
      Element element_id = doc.createElement("id");
      Text textContents = doc.createTextNode(" 456 ");
      element_id.appendChild(textContents);
      element_start.appendChild(element_id);
      Element element_name = doc.createElement("name");
      textContents = doc.createTextNode(" s2 ");
      element_name.appendChild(textContents);
      element_start.appendChild(element_name);
      Element element_value = doc.createElement("value");
      textContents = doc.createTextNode(" world ");
      element_value.appendChild(textContents);
      element_start.appendChild(element_value);
      root.appendChild(element_start);
      //Write
      DOMSource source = new DOMSource(doc);
      StreamResult out = new StreamResult(new File("MyXmlOut.xml"));
      TransformerFactory tff = TransformerFactory.newInstance();
      Transformer tf = tff.newTransformer();
      tf.transform(source, out);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

答案 1 :(得分:2)

您的选择(至少是其中一些选项):

  • 使用Streaming API for XML(StAX),包javax.xml.stream
  • 使用DOM,如另一个答案所述。如果文档变得非常大(内存),请小心。
  • 使用JDOM或其​​他类似DOM的API,它们对Java开发人员来说更友好一些。同样的警告也适用于DOM。
  • 使用JAXB。

是否需要使用DTD取决于最终使用XML文档的人/事。您不需要它只是为了进行Java处理。如果可能,请使用W3C XML Schema而不是DTD。

答案 2 :(得分:1)

您还可以使用XML DOM API创建或操作XML文档。看看this教程。