Android 通过DOM解析并修改xml文件

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25697993/article/details/53223097
private void modifyXml(String path) {

        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            /**
             * 方法1
             * 将指定路径的文件通过输入流读取内容,然后再解析
             */
            // 将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。
            // InputSource mInputSource = new InputSource();   //定义xml文档的输入源..
            // String mXmlString = getXMLString(path);
            // mInputSource.setCharacterStream(new StringReader(mXmlString)); 
            // 设置输入源的字符流...
            // Document document = builder.parse(mInputSource);
            /**
             * 方法2
             * 将指定路径的文件直接通过DocumentBuilder解析
             */
            // 将给定路径文件解析为一个XML文档,并且返回一个新的 DOM Document 对象。
            File file = new File(path);
            Document document = builder.parse(file);
            document.normalize();

            //创建 "disabled-components" 节点
            Element mDisComponents = document.createElement(mNodeName);
            //创建item节点
            Element item = document.createElement("item");
            //设置item节点的属性名和属性值
            item.setAttribute("name", activityName);
            //将item节点作为"disabled-components"的子节点
            mDisComponents.appendChild(item);

            //循环所有的package节点
            for (int i = 0; i < document.getElementsByTagName("package").getLength(); i++) {
                Element mPackageDoc = (Element) document.getElementsByTagName("package").item(i);
                //判断package节点的name属性值是否是指定值
                if (packageName.equals(mPackageDoc.getAttribute("name"))) {
                    //是,则判断package节点下的最后一个节点是否为指定值
                    if (!mNodeName.equals(mPackageDoc.getLastChild().getNodeName())) {
                        //不是,则将之前创建的"disabled-components" 节点插入到package节点的最后
                        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);
展开阅读全文

没有更多推荐了,返回首页