问题
I would like to update an xml file from another xml file.I have used an 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>
from the above two xml files i would like to change the attribute value one. xml when if
<int name =\"linearLayout1\" value = \"8\"/>
from two.xml then I would like to update one.xml file as where LinearLayout android:id=\"@+id/linearLayout1\" then change the attribute value as android:visibility=\"gone\".
回答1:
Here is code what you want it's
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 checking **/
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);
来源:https://stackoverflow.com/questions/9884051/how-to-update-xml-file-from-another-xml-file-dynamically