2012-02-17 12 views
0

BlackberryでXmlを解析しようとしています。 xmlをSDカードにコピーしました。私はこのコードを試して成功しました。私はXMLに新しいタグ(ノード)を挿入しようとしましたが、動作しますが、ファイルの最後に追加されますが、それを行う最良の方法であるかどうかはわかりませんが、変更を保存するファイルは?Xmlドキュメントをファイルに書き込んで、変更をブラックベリーに保存します。

DocumentBuilderFactory docBuilderFactory= DocumentBuilderFactory. newInstance(); 
DocumentBuilder docBuilder= docBuilderFactory.newDocumentBuilder(); 
docBuilder.isValidating(); 
doc = docBuilder.parse(conn.openInputStream()); 
InsertBlock(doc); 
doc.getDocumentElement().normalize(); 
NodeList list=doc.getElementsByTagName("*"); 
node=new String(); 
element = new String(); 

for (int i=0;i<list.getLength();i++){ 
     Node value=list.item(i).getChildNodes().item(0); 
     node=list.item(i).getNodeName(); 
     element=value.getNodeValue(); 
} 

また、新しいノードを挿入する:

Node emp=myDocument.createElement("Emp"); 
Text NodeText = myDocument.createTextNode("DD"); 
emp.appendChild(NodeText); 
myDocument.appendChild(emp); 

答えて

1

新しいノードを挿入するためにあなたがNode#insertBefore()代わりのNode#appendChild()を使用する必要があります。ドキュメントhereを確認してください。

someExistingNodeはあなたの新しい Node EMPを追加する前に Node(おそらく Element)である
Node emp=myDocument.createElement("Emp"); 
Text NodeText = myDocument.createTextNode("DD"); 
emp.appendChild(NodeText); 
myDocument.insertBefore(emp, someExistingNode); 

Node emp=myDocument.createElement("Emp"); 
Text NodeText = myDocument.createTextNode("DD"); 
emp.appendChild(NodeText); 
myDocument.appendChild(emp); 

を交換してください。

編集1:編集2

try { 
    String filePath = "file:///store/home/user/XmlFile.xml"; 
    FileConnection fc = (FileConnection) Connector.open(filePath, Connector.READ_WRITE); 
    if (!fc.exists()) { 
     fc.create(); // create the file if it doesn't exist 
    } else { 
     fc.truncate(0); // truncate the file if it exists 
    } 

    OutputStream os = fc.openOutputStream(); 
    XMLWriter xmlWriter = new XMLWriter(os); 
    xmlWriter.setPrettyPrint(); 
    DOMInternalRepresentation.parse(myDocument, xmlWriter); 
    os.close(); 
    fc.close(); 

} catch (Exception e) { 
    // Place exception handling code here 
} 

をファイルにXMLを書き込む方法:ノードの挿入とのため追加のコードサンプルXMLからファイルへ

try { 
    // Creating document 
    Document myDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 

    Element parentElement = myDocument.createElement("parentTag"); 

    // create first element and append it to parent 
    Element firstElement = myDocument.createElement("firstElement"); 
    firstElement.appendChild(myDocument.createTextNode("1")); 
    parentElement.appendChild(firstElement); 

    // create third element and append it to parent 
    Element thirdElement = myDocument.createElement("thirdElement"); 
    thirdElement.appendChild(myDocument.createTextNode("3")); 
    parentElement.appendChild(thirdElement); 

    // create second element and insert it between first and third elements 
    Element secondElement = myDocument.createElement("secondElement"); 
    secondElement.appendChild(myDocument.createTextNode("2")); 
    parentElement.insertBefore(secondElement, thirdElement); 

    myDocument.appendChild(parentElement); 

    // Writing document to file 
    String filePath = "file:///store/home/user/XmlFile.xml"; 
    FileConnection fc = (FileConnection) Connector.open(filePath, Connector.READ_WRITE); 
    if (!fc.exists()) { 
     fc.create(); // create the file if it doesn't exist 
    } else { 
     fc.truncate(0); // truncate the file if it exists 
    } 

    OutputStream os = fc.openOutputStream(); 
    XMLWriter xmlWriter = new XMLWriter(os); 
    xmlWriter.setPrettyPrint(); 
    DOMInternalRepresentation.parse(myDocument, xmlWriter); 
    os.close(); 
    fc.close();    

} catch (ParserConfigurationException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (SAXException e) { 
    e.printStackTrace(); 
}  

を書いてもthis questionをチェックBlackBerryでのXML作成に関して。

+0

MrVincenzo ..ありがとうございました。私は多くの助けを借りてくれました。:) – Reham

+0

どうすればノードを削除できますか? – Reham

+0

あなたは@ Rehamを歓迎します。 'Node#removeChild()'メソッドで 'Node'sを削除することができます。たとえば、サンプルコードで** firstElement **を削除するために 'parentElement.removeChild(firstElement);'を呼び出すことができます。 – mrvincenzo

関連する問題