How to dynamically update an xml file from another XML file?

I would like to update the xml file from another xml file. I used the xml file as shown below:

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 as follows:

  <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <int name="linearLayout1" value="8" /> <int name="linearLayout2" value="0" /> </map> 

Of the two xml files listed above, I would like to change the value of the one attribute. xml when if

  <int name ="linearLayout1" value = "8"/> 

from two.xml , then I would like to update the one.xml file, where LinearLayout android: id = "@ + id / linearLayout1" then change the attribute value as android: visibility = "gone" .

+2
source share
1 answer

Here is the code you want it

  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); 

/ ** * Logic for verification ** /

 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; } } } 

/ ** * Logic for reading one.xml and setting 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"); } } } } 

/ ** * Logic for rewriting 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); 
+1
source

Source: https://habr.com/ru/post/1403820/


All Articles