private void modifyXml (String path) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
/**
* 方法1
* 将指定路径的文件通过输入流读取内容,然后再解析
*/
/**
* 方法2
* 将指定路径的文件直接通过DocumentBuilder解析
*/
File file = new File(path);
Document document = builder.parse(file);
document.normalize();
Element mDisComponents = document.createElement(mNodeName);
Element item = document.createElement("item" );
item.setAttribute("name" , activityName);
mDisComponents.appendChild(item);
for (int i = 0 ; i < document.getElementsByTagName("package" ).getLength(); i++) {
Element mPackageDoc = (Element) document.getElementsByTagName("package" ).item(i);
if (packageName.equals(mPackageDoc.getAttribute("name" ))) {
if (!mNodeName.equals(mPackageDoc.getLastChild().getNodeName())) {
mPackageDoc.appendChild(mDisComponents);
}
}
}
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(path));
transformer.transform(source, result);
Toast.makeText(MainActivity.this ,"ok" ,Toast.LENGTH_SHORT).show();
Log.d(TAG, "-----------modifyXML ---------OK" );
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
mPackageDoc.getLastChild ()无法转换成 Element 所以我用下面方法
Element mItem = (Element) mNodeDoc.getElementsByTagName ("item" )
.item (mNodeDoc.getElementsByTagName ("item" ).getLength ()-1 )