Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中更改DOM节点?_Java_Android_Xml Parsing - Fatal编程技术网

如何在Java中更改DOM节点?

如何在Java中更改DOM节点?,java,android,xml-parsing,Java,Android,Xml Parsing,我已经编辑了EditText节点的text属性,现在我想将其提交到DOM,但我不知道如何提交。这就是我到目前为止所做的: InputStream fXmlFile = resources.openRawResource(R.raw.pages); //Reads xml file and gets the node types and attributes DocumentBuilderFactory dbFactory = DocumentBu

我已经编辑了EditText节点的text属性,现在我想将其提交到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();
        }   

我忘记了文档的链接。但是如果我没记错的话,您不能对资源进行更改,因为您使用的代码是
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();
}

我正在使用ApacheXML。

也许这可以帮助setAttribute调用是一个变异调用。你看到的错误是什么?@PavanSudarshan没有错误。我想对属性进行变异,然后将其提交给原始DOM。然后setAttribute应该为您执行此操作,因为您没有创建任何新的元素来执行此操作。我遗漏了什么吗?你说的“将其提交到原始DOM”是什么意思?setAttribute()修改原始DOM,那么您还想得到什么?如果要保存对已安装应用程序的更改,则在一般情况下不能这样做。如果您想在其他地方输出结果,那么可以使用javax.xml.transform.Transformer进行身份转换。您知道这是否与Android 2.1兼容吗?你知道如何保存到字符串而不是文件吗?ApacheXML是一个库,你可以在Android中使用它。要将DOM树写入字符串,可以将其序列化为
StringWriter
java.io.StringWriter sw=new java.io.StringWriter();XMLSerializer serializer=新的XMLSerializer(sw,格式)。然后要获取字符串:
sw.toString()
。Eclipse无法识别OutputFormat和导入,我想我必须下载该库并将其添加到我的应用程序项目中。非常抱歉,我使用的库是Apache Xerces,您可以在此处下载:。再次抱歉…你知道我需要下载哪一个并放在那里吗?以什么形式?
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();
}