我想知道如何实时更新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世界很新。
答案 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>