如何在Android中以XML附加标签?

问题描述

| 我想将一些内容写入XML文件。为此,我创建了一个XML文件,并使用元素,属性和值以及一些数据编写了标签,如下所示:
XmlSerializer serializer = Xml.newSerializer();
serializer.startTag(null,element);
serializer.attribute(null,atbname,value);
serializer.text(text);
serializer.endTag(null,tag);
如果我想添加带有新元素,新属性等的新标签,并且在该元素的标签位置输入该元素,则该元素将使用先前的标签进行修改。 如何将新标签附加到以前附加的标签上?     

解决方法

        看一下这个链接。它应该使您了解如何向XML添加节点。这是一个片段。
public DomXmlExample() {
        try {
            /////////////////////////////
            //Creating an empty XML Document

            //We need a Document
            DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
            Document doc = docBuilder.newDocument();

            ////////////////////////
            //Creating the XML tree

            //create the root element and add it to the document
            Element root = doc.createElement(\"root\");
            doc.appendChild(root);

            //create a comment and put it in the root element
            Comment comment = doc.createComment(\"Just a thought\");
            root.appendChild(comment);

            //create child element,add an attribute,and add to root
            Element child = doc.createElement(\"child\");
            child.setAttribute(\"name\",\"value\");
            root.appendChild(child);

            //add a text element to the child
            Text text = doc.createTextNode(\"Filler,... I could have had a foo!\");
            child.appendChild(text);

            /////////////////
            //Output the XML

            //set up a transformer
            TransformerFactory transfac = TransformerFactory.newInstance();
            Transformer trans = transfac.newTransformer();
            trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,\"yes\");
            trans.setOutputProperty(OutputKeys.INDENT,\"yes\");

            //create string from xml tree
            StringWriter sw = new StringWriter();
            StreamResult result = new StreamResult(sw);
            DOMSource source = new DOMSource(doc);
            trans.transform(source,result);
            String xmlString = sw.toString();

            //print xml
            System.out.println(\"Here\'s the xml:\\n\\n\" + xmlString);

        } catch (Exception e) {
            System.out.println(e);
        }
    }
    ,        在调用
serializer.startDocument(
之后并在调用
serializer.endDocument()
之前,可以创建任意数量的标签。调用endDocument之后,您的xml就完成了。如果您已将此xml写入文件中,并且现在再次编写相同的代码以创建xml,但更改了任何类型的值,则该新xml将覆盖此先前的xml文件。因此您将获得具有新插入标签的xml文件。如果要向先前存在的xml文件中添加一些新标记,则首先解析该xml文件以获取所有内容,然后创建另一个xml文件,该文件首先从先前xml中获取数据并进行处理,然后添加新插入的数据,以便新创建的xml将包含所有内容(既有以前的数据,也有新数据)
private String writeXml(){
    XmlSerializer serializer = Xml.newSerializer();
    StringWriter writer = new StringWriter();
    try {
        serializer.setOutput(writer);
        serializer.startDocument(\"UTF-8\",true);
        serializer.startTag(\"\",\"messages\");
        serializer.attribute(\"\",\"number\",\"value of attribute\");

            serializer.startTag(\"\",\"title\");
            serializer.text(1+\" title\");
            serializer.endTag(\"\",\"title\");
            serializer.startTag(\"\",\"title\");
            serializer.text(2+\" text\");
            serializer.endTag(\"\",\"title\");


        serializer.endTag(\"\",\"messages\");
        serializer.startTag(\"\",\"messages1\");
        serializer.attribute(\"\",\"messages1\");
        serializer.endDocument();
        return writer.toString();
    } catch (Exception e) {
        throw new RuntimeException(e);
    } 
}
输出
<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\' ?>
<messages number=\"value of attribute\">
<title>1 title</title>
<title>2 text</title>
</messages>
<messages1 number=\"value of attribute\">
<title>1 title</title>
<title>2 text</title>
</messages1>
    ,        我不太明白您的意思,但对我自己来说,我已经使用了此示例,并且效果很好
private String writeXml(List<Message> messages){
    XmlSerializer serializer = Xml.newSerializer();
    StringWriter writer = new StringWriter();
    try {
        serializer.setOutput(writer);
        serializer.startDocument(\"UTF-8\",String.valueOf(messages.size()));
        for (Message msg: messages){
            serializer.startTag(\"\",\"message\");
            serializer.attribute(\"\",\"date\",msg.getDate());
            serializer.startTag(\"\",\"title\");
            serializer.text(msg.getTitle());
            serializer.endTag(\"\",\"url\");
            serializer.text(msg.getLink().toExternalForm());
            serializer.endTag(\"\",\"url\");
            serializer.startTag(\"\",\"body\");
            serializer.text(msg.getDescription());
            serializer.endTag(\"\",\"body\");
            serializer.endTag(\"\",\"message\");
        }
        serializer.endTag(\"\",\"messages\");
        serializer.endDocument();
        return writer.toString();
    } catch (Exception e) {
        throw new RuntimeException(e);
    } 
}
您可以在此处阅读全文     ,        请检查我使用过的此链接,它工作正常,也将解决您的问题。 http://www.anddev.org/write_a_simple_xml_file_in_the_sd_card_using_xmlserializer-t8350.html。 是的,您也可以添加新标签。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...