【问题标题】:Cannot append data to an existing XML file continuously无法将数据连续附加到现有 XML 文件
【发布时间】:2018-04-30 19:21:37
【问题描述】:

我试图创建一个 XML 文件。我可以第一次向它附加数据,但不能附加更多的数据。我使用了以下代码。

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try {
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    //root elements
    Document doc = docBuilder.newDocument();

    Element contact1 = doc.createElement("Contact");
    doc.appendChild(contact1);

    Element contact = doc.createElement("ContactNo");
    contact.appendChild(doc.createTextNode("1"));
    contact1.appendChild(contact);

    Element firstname = doc.createElement("Number");
    firstname.appendChild(doc.createTextNode("553827575"));
    contact.appendChild(firstname);

    Element lastname = doc.createElement("Name");
    lastname.appendChild(doc.createTextNode("hfghhfgh"));
    contact.appendChild(lastname);

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);

    File sdcardxml = Environment.getExternalStorageDirectory();

    File dirxml = new File(sdcardxml.getAbsolutePath() + 
      "/xml/");
    if(dirxml.mkdirs()){ }else{ }
    new File(dirxml, "contacts.xml");

    StreamResult result =  new StreamResult(new 
     File("/storage/sdcard0/xml/contacts.xml"));
    transformer.transform(source, result);

    StringWriter writer = new StringWriter();
    transformer.transform(new DOMSource(doc), new StreamResult(writer));

    String personXMLStringValue1 = writer.getBuffer().toString();
}
catch(ParserConfigurationException pce)
{
    pce.printStackTrace();
}
catch(TransformerException tfe)
{
    tfe.printStackTrace();
}

上面的代码是创建XML文件。这很好用。 然后,为了将数据附加到现有的 XML 文件,我使用了这段代码。

try {
    File newXmlFile = new File(
            Environment.getExternalStorageDirectory() + "/xml/contacts.xml");
    String FILE_PATH = newXmlFile.getPath();

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();

    if (newXmlFile.exists()) {
        docFactory.setValidating(false);

        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        Document doc = docBuilder.parse(newXmlFile);
        doc.getDocumentElement().normalize();

        Node rootElement = doc.getFirstChild();
        NodeList rootList = doc.getElementsByTagName("Contact");
        Node root = rootList.item(0);

        Element sayingParent = doc.createElement("ContactNo");
        sayingParent.appendChild(doc.createTextNode("2"));
        root.appendChild(sayingParent);

        Element firstname = doc.createElement("Number");
        firstname.appendChild(doc.createTextNode(num));
        sayingParent.appendChild(firstname);

        Element lastname = doc.createElement("Name");
        lastname.appendChild(doc.createTextNode(name));
        sayingParent.appendChild(lastname);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(FILE_PATH));
        transformer.transform(source, result);          
    }
}
catch (Exception e)
{
    e.printStackTrace();
}

我期待以下 XML 文件作为输出:

<?xml version="1.0" encoding="UTF-8"?>
<Contact>
  <ContactNo>1
     <Number>55535</Number>
     <Name>hdhfhg</Name>
  </ContactNo>
  <ContactNo>2
     <Number>242585</Number>
     <Name>sdasds</Name>
  </ContactNo>
  <ContactNo>2
     <Number>454565</Number>
     <Name>grgfdgf</Name>
  </ContactNo>
</Contact>

事实上,数据并没有附加更多。

【问题讨论】:

  • 有没有叫“联系人”的元素?

标签: java android xml


【解决方案1】:

不要使用 if 语句,而是尝试使用 while 或 for 循环

while (newXmlFile.exists()) {
      do something

【讨论】:

  • 如果休息服务或类似服务要求它,这将无济于事,问题是文件被覆盖,或者根本没有写入......我猜......
  • 即使我使用了while循环,我仍然无法追加更多数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多