это мой код; чтение закончено, как написать написание и обновление в локальном файле XML в исходном коде Android? - PullRequest
0 голосов
/ 24 февраля 2012
public class LocalXMLActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); // set the layout.. it refers main.xml
                                       // from the layout folder.
        InputStream is;
        DocumentBuilderFactory factory;
        DocumentBuilder builder;
        Document doc;
        NodeList allTitles = null;
        String dataAll;
        try {

            // Input Stream is used to read the bytes. getResources refers to
            // the android resources(res)folder and open RawResource to the raw
            // folder under res. (res/raw)
            is = this.getResources().openRawResource(R.raw.data);
            // Is to read the parser that prodcues from XML DOM.
            factory = DocumentBuilderFactory.newInstance();
            // Once an instance of this class is obtained, XML can be parsed
            // from a variety of input sources. These input sources are
            // InputStreams, Files, URLs, and SAX InputSources. There are many
            // sources to take data from internet.
            builder = factory.newDocumentBuilder();
            // the Document represents the entire HTML or XML document.
            // Conceptually, it is the root of the document tree, and provides
            // the primary access to the document's data.
            doc = builder.parse(is);
            // Retrieving the "company" node from xml
            allTitles = doc.getElementsByTagName("Company");

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        dataAll = "";
        for (int i = 0; i < allTitles.getLength(); i++) {
            dataAll += allTitles.item(i).getChildNodes().item(0).getNodeValue() + "\n";
        }

        TextView tv = (TextView)findViewById(R.id.myTextView); // finds the
                                                               // widget"myTextView"
                                                               // from main.xml
        tv.setText(dataAll); // setting the dataAll value to myTextView.
    }
}

xml файл: res / raw / data.xml

    <?xml version="1.0" ?>
<content>
    <item>
        <Company>Google</Company>
        <Feature>Search Engine / Mail / Social Media</Feature>
        <url>www.google.com</url>
    </item>
    <item>
        <Company>Yahoo</Company>
        <Feature>Search Engine / Mail</Feature>
        <url>www.yahoo.com</url>
    </item>
</content>

приведенный выше код только читает код, у меня есть файл XML, сохраненный в файле res / raw / data.xml, который яЯ просто читаю, но как писать записи и обновления в локальном файле XML с внутренним чтением исходного кода записи для записи и обновления в локальном файле XML

Ответы [ 2 ]

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

Вы можете создать новый файл на SD-карте следующим образом:

File Directory=  new File(Environment.getExternalStorageDirectory()
                        + File.separator + "working" +File.separator+"accounts");


File masterXMLfile = new File(Directory,"MasterCategories.xml");
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                  //Get the DocumentBuilder
                  DocumentBuilder docBuilder = null;
                try {
                    docBuilder = factory.newDocumentBuilder();
                } catch (ParserConfigurationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                  //Create blank DOM Document
                  Document doc = docBuilder.newDocument();


                  //create the root element
                  Element root = doc.createElement("Categories");
                  //all it to the xml tree
                  doc.appendChild(root);
                  for(int i =0; i < nodeArray.length;i++)
                  {
                      System.out.println("entered into if loop");
                      Element subroot = doc.createElement("Category");
                      root.appendChild(subroot);
                      Element nameNode = doc.createElement("Name");
                      nameNode.appendChild(doc.createTextNode(nodeArray[i]));
                      subroot.appendChild(nameNode);

                      Element thumbNailNode = doc.createElement("thumbnail");
                      thumbNailNode.appendChild(doc.createTextNode(nodeArray[i]+".jpg"));
                      subroot.appendChild(thumbNailNode);
                      Element descriptionNode = doc.createElement("description");
                      descriptionNode.appendChild(doc.createTextNode(nodeArray[i]+" data"));
                      subroot.appendChild(descriptionNode);
                  }
                  TransformerFactory transfactory = TransformerFactory.newInstance();
                    Transformer transformer= null;
                    try {
                        transformer = transfactory.newTransformer();
                    } catch (TransformerConfigurationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    transformer.setOutputProperty(OutputKeys.INDENT, "yes");

                    // create string from xml tree
                    // StringWriter sw = new StringWriter();
                    // StreamResult result = new StreamResult(sw);
                    FileWriter categoriesFW = null;
                    try {
                        categoriesFW = new FileWriter(masterXMLfile);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    StreamResult result = new StreamResult(categoriesFW);
                    DOMSource source = new DOMSource(doc);
                    try {
                        transformer.transform(source, result);
                    } catch (TransformerException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                if(!masterXMLfile.exists())
                {
                    try {
                        masterXMLfile.createNewFile();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
0 голосов
/ 24 февраля 2012

Ну, если честно, это очень запутанно написано, но вот мои мысли:

FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/path/file.xml");
fos.write(byte_array_from_input);
fos.close();

Это запишет файл на ваш sdcard в /path/file.xml.Вы помещаете байтовый массив, который вы можете сделать за один раз для небольших файлов или в цикле, если у вас большой набор данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...