如何从另一个XML文件dynamic更新XML文件?
我想从另一个xml文件更新一个xml文件。我已经使用了一个xml文件,如下所示:
one.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00BFFF"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:visibility="visible"> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:visibility="visible"> </LinearLayout> </LinearLayout> </ScrollView>
two.xml如下所示:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <int name="linearLayout1" value="8" /> <int name="linearLayout2" value="0" /> </map>
从上面的两个XML文件我想改变属性值之一。 XML时,如果
<int name ="linearLayout1" value = "8"/>
从two.xml然后我想更新one.xml文件作为在那里LinearLayout android:id =“@ + id / linearLayout1”然后更改属性值android:visibility =“gone” 。
这里是代码你想要的
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.parse("/home/riddhish/developerworkspace/SplitString/src/com/updatexmlwithjava/two.xml"); DocumentTraversal traversal = (DocumentTraversal) doc; Node a = doc.getDocumentElement(); NodeIterator iterator = traversal.createNodeIterator(a, NodeFilter.SHOW_ELEMENT, null, true);
/ ** *逻辑检查** /
boolean flag=false; for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { Element e = (Element) n; if ("int".equals(e.getTagName())) { if(e.getAttribute("name").equals("linearLayout1")){ if(e.getAttribute("value").equals("8")) flag=true; } } }
/ ** *读取one.xml并设置android:visibility =“gone”的逻辑** /
docFactory = DocumentBuilderFactory.newInstance(); docBuilder = docFactory.newDocumentBuilder(); doc = docBuilder.parse("/home/riddhish/developerworkspace/SplitString/src/com/updatexmlwithjava/one.xml"); traversal = (DocumentTraversal) doc; a = doc.getDocumentElement(); iterator = traversal.createNodeIterator(a, NodeFilter.SHOW_ELEMENT, null, true); for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { Element e = (Element) n; if ("LinearLayout".equals(e.getTagName())) { if(e.getAttribute("android:id").equals("@+id/linearLayout1")){ if(flag==true){ System.out.println(""+e.getAttribute("android:visibility")); e.setAttribute("android:visibility", "gone"); } } } }
/ ** *重写one.xml的逻辑** /
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("/home/riddhish/developerworkspace/SplitString/src/com/updatexmlwithjava/one.xml")); iterator = traversal.createNodeIterator(a, NodeFilter.SHOW_ELEMENT, null, true); doc = docBuilder.newDocument(); Element rootElement = doc.createElement("ScrollView"); doc.appendChild(rootElement); for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { rootElement.appendChild(doc.importNode(n, true)); } transformer.transform(source, result);