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