Java / Android - 读取、操作并将 XML 文件保存到内部存储
Java / Android - Read, Manipulate and save XML file to internal Storage
我正在开发一个 Android 应用程序,它将使用一个文件系统,其中数据将存储在 xml - 文件..
我成功读取了相应的文件并更改了节点(值已更改 - 如果在调试器中查看)但我本地保存的文件没有任何更改..
过程:
1. Read/open 本地文件 //完成
2.更改DOM节点//完成
3. 在我的本地文件中保存更改 <- 失败
到目前为止,我知道在遵循一些教程和其他代码片段之后我将不得不使用 TransformerFactory,但更改仍未保存到我的文件中..
谁能告诉我哪里做错了?
我的代码:
try {
File path = a.getFilesDir();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(path.getPath() + "/" + FILENAME_PERMISSIONS);
NodeList myCourses = doc.getElementsByTagName(NODE_COURSE);
for (int i = 0; i < myCourses.getLength(); i++) {
Node course = myCourses.item(i);
Element e = (Element)myCourses.item(i);
Node myPermission = course.getFirstChild();
String name = e.getAttribute(ATTR_NAME);
switch (name){
case FLAG_CrossCult:
myPermission.setTextContent(boolToString(crossCult));
break;
case FLAG_KAIROS:
myPermission.setTextContent(boolToString(kairos));
break;
case FLAG_UnfinStory:
myPermission.setTextContent(boolToString(unfinStory));
break;
case FLAG_EmpToInf:
myPermission.setTextContent(boolToString(empToInf));
break;
case FLAG_YouthKairos:
myPermission.setTextContent(boolToString(youthKairos));
break;
}
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(path.getPath() + "/" + FILENAME_PERMISSIONS));
transformer.transform(source,streamResult);
}
}
catch (ParserConfigurationException e){
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
我发现了问题...
代码几乎正确。需要进行 2 处更改:
1:需要使用"new File()"
String myPath = path.getPath() + "/" + FILENAME_PERMISSIONS;
Document doc = docBuilder.parse(new File(myPath));
2:我写错了节点
//Node myPermission = course.getFirstChild();
//is now:
NodeList permissionList = e.getElementsByTagName(NODE_PERMISSION);
Node myPermission = permissionList.item(0);
我会把问题留在这里,以防有人需要做同样的事情..
我正在开发一个 Android 应用程序,它将使用一个文件系统,其中数据将存储在 xml - 文件..
我成功读取了相应的文件并更改了节点(值已更改 - 如果在调试器中查看)但我本地保存的文件没有任何更改..
过程: 1. Read/open 本地文件 //完成 2.更改DOM节点//完成 3. 在我的本地文件中保存更改 <- 失败
到目前为止,我知道在遵循一些教程和其他代码片段之后我将不得不使用 TransformerFactory,但更改仍未保存到我的文件中..
谁能告诉我哪里做错了?
我的代码:
try {
File path = a.getFilesDir();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(path.getPath() + "/" + FILENAME_PERMISSIONS);
NodeList myCourses = doc.getElementsByTagName(NODE_COURSE);
for (int i = 0; i < myCourses.getLength(); i++) {
Node course = myCourses.item(i);
Element e = (Element)myCourses.item(i);
Node myPermission = course.getFirstChild();
String name = e.getAttribute(ATTR_NAME);
switch (name){
case FLAG_CrossCult:
myPermission.setTextContent(boolToString(crossCult));
break;
case FLAG_KAIROS:
myPermission.setTextContent(boolToString(kairos));
break;
case FLAG_UnfinStory:
myPermission.setTextContent(boolToString(unfinStory));
break;
case FLAG_EmpToInf:
myPermission.setTextContent(boolToString(empToInf));
break;
case FLAG_YouthKairos:
myPermission.setTextContent(boolToString(youthKairos));
break;
}
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(path.getPath() + "/" + FILENAME_PERMISSIONS));
transformer.transform(source,streamResult);
}
}
catch (ParserConfigurationException e){
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
我发现了问题...
代码几乎正确。需要进行 2 处更改:
1:需要使用"new File()"
String myPath = path.getPath() + "/" + FILENAME_PERMISSIONS;
Document doc = docBuilder.parse(new File(myPath));
2:我写错了节点
//Node myPermission = course.getFirstChild();
//is now:
NodeList permissionList = e.getElementsByTagName(NODE_PERMISSION);
Node myPermission = permissionList.item(0);
我会把问题留在这里,以防有人需要做同样的事情..