Как изменить узел DOM в Java? - PullRequest
       25

Как изменить узел DOM в Java?

0 голосов
/ 26 ноября 2011

Я отредактировал атрибут text узла EditText, и теперь я хотел бы зафиксировать его в DOM, и я не знаю как. Это то, что я до сих пор:

InputStream fXmlFile = resources.openRawResource(R.raw.pages);

            //Reads xml file and gets the node types and attributes
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();
            NodeList nList = doc.getElementsByTagName("*");
            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);   
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    if(eElement.getNodeName().compareTo("EditText")==0)
                    {
                        String resName = eElement.getAttribute(ANDROID_ID);
                        resName = resName.replace("@+id/", "");
                        System.out.println(eElement.getNodeName()+" " + eElement.getAttribute(ANDROID_ID));
                        int resID = resources.getIdentifier(resName, "id", "mfc.generalgui2");
                        //get value from edittext field
                        String value = ((EditText) findViewById(resID)).getText().toString();
                        //set text attribute to value
                        eElement.setAttribute("android:text", value);
                    }
                }
            }
        } 
        catch (Exception e) {
            System.out.println("Catch");
            e.printStackTrace();
        }   

Преобразование DOM в строковый код:

TransformerFactory transfac = TransformerFactory.newInstance();
            Transformer trans = transfac.newTransformer();
            trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            trans.setOutputProperty(OutputKeys.INDENT, "yes");


            StringWriter sw = new StringWriter();
            StreamResult result = new StreamResult(sw);
            DOMSource source = new DOMSource(doc);
            trans.transform(source, result);
            String xmlString = sw.toString();
            System.out.println(xmlString);

1 Ответ

0 голосов
/ 27 ноября 2011

забыл ссылку на документацию.Но если я правильно помню, вы не можете вносить изменения в ресурс - в качестве кода вы используете R.raw.pages.

Чтобы сохранить дерево DOM в файл, вы можете использовать этот код:

import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import java.io.File;
import java.io.FileOutputStream;

...

//your document
Document doc = dBuilder.parse(fXmlFile);

OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);

FileOutputStream fos = new FileOutputStream(new File("your-file"));
try {
  XMLSerializer serializer = new XMLSerializer(fos, format);
  serializer.serialize(doc);
} finally {
  fos.close();
}

Я использую Apache XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...