更新\修改Android中的XML文件

时间:2016-03-19 21:58:08

标签: java android xml xml-parsing

我想知道如何实时更新XML文件。我有这个文件,例如:

<?xml version="1.0" encoding="UTF-8"?>
    <Cars>
        <car make="Toyota" model="95" hp="78" price="120"/>
        <car make="kia" model="03" hp="80" price="300"/>
    </Cars>

如何更新像这样的价格值? :

<?xml version="1.0" encoding="UTF-8"?>
    <Cars>
        <car make="Toyota" model="95" hp="78" price="50"/>
        <car make="kia" model="03" hp="80" price="100"/>
    </Cars>

我搜索了网页,但我找到的只是如何解析,以及如何使用XmlSerializer编写整个文件,而不是如何修改。我也在Java中找到this,但我没能在Android上实现它,因为我对android-xml世界很新。

2 个答案:

答案 0 :(得分:7)

在漫长的一天搜索后尝试确定并尝试使用Java的DOM达到目标。要修改XML文件,首先要实例化这些文件以处理XML:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(context.openFileInput("MyFileName.xml")); // In My Case it's in the internal Storage

然后通过以下方式为所有“car”元素制作NodeList

NodeList nodeslist = doc.getElementsByTagName("car");

或所有元素,将汽车String替换为"*"

现在它可以很好地搜索每个节点属性,直到它达到KIA的"price"值,例如:

for(int i = 0 ; i < nodeslist.getLength() ; i ++){
            Node node = nodeslist.item(i);
            NamedNodeMap att = node.getAttributes();
            int h = 0;
            boolean isKIA= false;
            while( h < att.getLength()) {
                Node car= att.item(h);
                if(car.getNodeValue().equals("kia"))
                   isKIA= true;      
                if(h == 3 && setSpeed)   // When h=3 because the price is the third attribute
                   playerName.setNodeValue("100");   
                 h += 1;  // To get The Next Attribute.
           }
}

确定最后,使用Transformer将新文件保存在同一位置,如下所示:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource dSource = new DOMSource(doc);
StreamResult result = new StreamResult(context.openFileOutput("MyFileName.xml", Context.MODE_PRIVATE));  // To save it in the Internal Storage
transformer.transform(dSource, result);

就是这样:)。我希望这会有所帮助。

答案 1 :(得分:0)

Underscore-java库可以读取,修改和写入xml文件。我是该项目的维护者。

import com.github.underscore.lodash.U;

public class MyClass {
    public static void main(String args[]) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
        + "<Cars>"
        + "  <car make=\"Toyota\" model=\"95\" hp=\"78\" price=\"120\"/>"
        + "  <car make=\"kia\" model=\"03\" hp=\"80\" price=\"300\"/>"
        + "</Cars>";
        java.util.Map<String, Object> object = (java.util.Map<String, Object>) U.fromXml(xml);
        U.set(object, "Cars.car[0].-price", "50");
        U.set(object, "Cars.car[1].-price", "100");
        System.out.println(U.toXml(object)); 
    }
}

// <?xml version="1.0" encoding="UTF-8" standalone="no"?>
// <Cars>
//   <car make="Toyota" model="95" hp="78" price="50"/>
//   <car make="kia" model="03" hp="80" price="100"/>
// </Cars>