2011-10-18 7 views
0

私はjavaがXMLファイルを解析してデータを取得できることを知っていますが、xmlノード/ノードを作成し、javaを使用して値を挿入する方法も知りたいと思っています。JavaでXML infosetを構築する方法

ファイル:myXML.xml私が欲しい

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

私はデータを挿入するために必要とするたびに、これらのノード<id> <name> and <value>たびに作成します。 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> 

私が使用して教えてください:私は= "456"、名前= "S2"、値= "世界" IDを保存する場合は

がファイルとしjava & dtdを使用する必要がある場合は、

答えて

1

XML DOM APIを使用してXMLドキュメントを作成または操作することもできます。チュートリアルthisを見てください。

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(); 
    } 
    } 
} 
2

あなたのオプション(多くの少なくとも一部):

  • 別に言ったように、使用DOM
  • 、XML(StAXの)のパッケージjavax.xml.streamをストリーミングAPIを使用します回答。文書が非常に大きくなる(メモリ)場合は、このことに注意してください。
  • Java開発者にとって少し面白いJDOMやその他のDOM風のAPIを使用してください。 DOMと同じ警告が適用されます。
  • JAXBを使用します。

DTDを使用する必要があるかどうかは、XMLドキュメントを使用して誰が最終的になるかによって決まります。 Javaの処理を行うだけでは必要ありません。可能であれば、DTDの代わりにW3C XMLスキーマを使用します。

+2

私は、Beanオブジェクトとの間でデータをバインドするためにJAXBを推奨します。それはあなたの部分に多くの大騒ぎなしでオブジェクトのツリーをうまく処理します。条件付きでノードを作成したり、既存のドキュメントを変更する必要がある場合は、サイズの小さい(数十MB未満の)ドキュメントまたは大きいドキュメントの場合は[J] DOMを選択します(または開発時に不明な場合)。 –

関連する問題