Запишите XML-документ в файл, чтобы сохранить изменения в Blackberry - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь разобрать Xml в Blackberry. Я скопировал 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 Ответ

1 голос
/ 17 февраля 2012

Чтобы вставить новый узел (ы), вы должны использовать Node#insertBefore() вместо Node#appendChild(). Проверьте документацию здесь .

Заменить

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

с

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

Где someExistingNode - это Node (вероятно, Element), перед которым вы хотите добавить свой новый Node emp .

Редактировать 1: Как записать XML в файл

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
}

Редактировать 2: Добавлен пример кода для вставки узла и записи 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();
}     

Также проверьте этот вопрос относительно создания XML на BlackBerry.

...