Android中XML的一些操作

解析类:

// 构造方法   public XMLParser() {    }    /**    * 从URL获取XML使HTTP请求    *    * @param url    *      string    * */   public String getXmlFromUrl(String url) {     String xml = null;      try {       // defaultHttpClient       DefaultHttpClient httpClient = new DefaultHttpClient();       HttpPost httpPost = new HttpPost(url);        HttpResponse httpResponse = httpClient.execute(httpPost);       HttpEntity httpEntity = httpResponse.getEntity();       xml = EntityUtils.toString(httpEntity, "UTF-8");     } catch (UnsupportedEncodingException e) {       e.printStackTrace();     } catch (ClientProtocolException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }     return xml;   }    /**    * 获取XML DOM元素    *    * @param XML    *      string    * */   public Document getDomElement(InputStream is) {     Document doc = null;     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();     try {        DocumentBuilder db = dbf.newDocumentBuilder();        // InputSource is = new InputSource();       // is.setCharacterStream(new StringReader(xml));       doc = db.parse(is);     } catch (ParserConfigurationException e) {       Log.e("Error: ", e.getMessage());       return null;     } catch (SAXException e) {       Log.e("Error: ", e.getMessage());       return null;     } catch (IOException e) {       Log.e("Error: ", e.getMessage());       return null;     }      return doc;   }    public Document getDomDocumentUpdate(String xml) {     Document doc = null;     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();     try {        DocumentBuilder db = dbf.newDocumentBuilder();        InputSource is = new InputSource();       is.setCharacterStream(new StringReader(xml));       doc = db.parse(is);     } catch (ParserConfigurationException e) {       Log.e("Error: ", e.getMessage());       return null;     } catch (SAXException e) {       Log.e("Error: ", e.getMessage());       return null;     } catch (IOException e) {       Log.e("Error: ", e.getMessage());       return null;     }      return doc;   }    /**    * 获取节点值    *    * @param elem    *      element    */   public final String getElementValue(Node elem) {     Node child;     if (elem != null) {       if (elem.hasChildNodes()) {         for (child = elem.getFirstChild(); child != null; child = child             .getNextSibling()) {           if (child.getNodeType() == Node.TEXT_NODE) {             return child.getNodeValue();           }         }       }     }     return "";   }    /**    * 获取节点值    *    * @param Element    *      node    * @param key    *      string    * */   public String getValue(Element item, String str) {     NodeList n = item.getElementsByTagName(str);     return this.getElementValue(n.item(0));   }   //XML文件有更新后,调用此方法   public void output(Document node, String filename) {     TransformerFactory transFactory = TransformerFactory.newInstance();     try {       Transformer transformer = transFactory.newTransformer();       // 设置各种输出属性       transformer.setOutputProperty("encoding", "UTF-8");       transformer.setOutputProperty("indent", "yes");       DOMSource source = new DOMSource(node);       // 将待转换输出节点赋值给DOM源模型的持有者(holder)       // /source.setNode(node);       StreamResult result = new StreamResult();       if (filename == null) {         // 设置标准输出流为transformer的底层输出目标         result.setOutputStream(System.out);       } else {         result.setOutputStream(new FileOutputStream(filename));       }       // 执行转换从源模型到控制台输出流       transformer.transform(source, result);     } catch (TransformerConfigurationException e) {       e.printStackTrace();     } catch (TransformerException e) {       e.printStackTrace();     } catch (FileNotFoundException e) {       e.printStackTrace();     }   }    public String writeXml() {     XmlSerializer xml = Xml.newSerializer();     StringWriter writer = new StringWriter();     try {       xml.setOutput(writer);       xml.startDocument("UTF-8", true);       xml.startTag("", "blog");        xml.startTag("", "message");       xml.attribute("", "name", "xia");       xml.startTag("", "age");       xml.text("22");       xml.endTag("", "age");        xml.startTag("", "hobby");       xml.text("play");       xml.endTag("", "hobby");        xml.startTag("", "hight");       xml.text("165");       xml.endTag("", "hight");       xml.endTag("", "message");        xml.startTag("", "message");       xml.attribute("", "name", "chen");       xml.startTag("", "age");       xml.text("21");       xml.endTag("", "age");        xml.startTag("", "hobby");       xml.text("swin");       xml.endTag("", "hobby");        xml.startTag("", "hight");       xml.text("170");       xml.endTag("", "hight");       xml.endTag("", "message");        xml.endTag("", "blog");       xml.endDocument();      } catch (Exception e) {       throw new RuntimeException(e);      }      return writer.toString();   }        public boolean Write(String Filepath, String txt) {     FileOutputStream fos = null;     if (Environment.getExternalStorageState() != null) {// 这个方法在试探终端是否有sdcard!       File path = new File("sdcard/test");// 创建目录       File f = new File(Filepath);// 创建文件       if (!path.exists()) {// 目录不存在返回false         path.mkdirs();// 创建一个目录       }       if (!f.exists()) {// 文件不存在返回false         try {           f.createNewFile();           fos = new FileOutputStream(f);           fos.write((txt).getBytes("UTF-8"));           fos.close();         } catch (IOException e) {           // TODO Auto-generated catch block           e.printStackTrace();         }// 创建一个文件       }      }     return true;   }    private static XMLParser uniqueInstance = null;    public static XMLParser getInstance() {     if (uniqueInstance == null) {       uniqueInstance = new XMLParser();     }     return uniqueInstance;   } } 

上面的这个类中用了单例!分别定义了XML的创建,获取XML的节点值,更新后执行的操作!

MainActivity:

public class MainActivity extends Activity {   public static final String XMLPath = "sdcard/test/message.xml";   private Button create = null;    @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     create = (Button) findViewById(R.id.create);   }    // 自动创建XML   private void createXml() {     // sdcard/test/message.xml     XMLParser.getInstance().Write(XMLPath,         XMLParser.getInstance().writeXml());   }    // 遍历节点,找到特定节点并进行更换!   private void selectNode() {     Document document = null;     try {       FileInputStream fin = new FileInputStream(XMLPath);       document = XMLParser.getInstance().getDomElement(fin);       Node root = document.getDocumentElement();       if (root.hasChildNodes()) {         NodeList ftpnodes = root.getChildNodes();         Log.e("eee", root.getNodeName());// 根节点 blog          for (int i = 0; i < ftpnodes.getLength(); i++) {           NodeList ftplist = ftpnodes.item(i).getChildNodes();           Node su = ftpnodes.item(i);           Log.e("eee", su.getNodeName());// message           Element e = (Element) ftpnodes.item(i);           Log.e("eee", e.getAttribute("name"));// message= xia           for (int k = 0; k < ftplist.getLength(); k++) {             Node subnode = ftplist.item(k);             Log.e("eee",                 " subnode.getNodeName()"                     + subnode.getNodeName());             Log.e("eee",                 "subnode.getNodeType()" + subnode.getNodeType());             Log.e("eee", subnode.getFirstChild().getNodeValue());             if (subnode.getNodeType() == Node.ELEMENT_NODE                 && subnode.getNodeName().equals("hight")) {               subnode.getFirstChild().setNodeValue("175");               XMLParser.getInstance().output(document, XMLPath);             }           }         }       }      } catch (Exception e) {      }   }    // 添加一个新的根节点   private void insertNode() {     Document document = null;     try {       FileInputStream fin = new FileInputStream(XMLPath);       document = XMLParser.getInstance().getDomElement(fin);       // 插入根节点message       /**        *  180 22         *        * */       Element eltStu = document.createElement("message");       Element eltName = document.createElement("hight");       Element eltAge = document.createElement("age");       Attr attr = document.createAttribute("name");       attr.setValue("wang");       Text txtName = document.createTextNode("180");       Text txtAge = document.createTextNode("22");       eltName.appendChild(txtName);       eltAge.appendChild(txtAge);       eltStu.appendChild(eltName);       eltStu.appendChild(eltAge);       eltStu.setAttributeNode(attr);       Element eltRoot = document.getDocumentElement();       eltRoot.appendChild(eltStu);       XMLParser.getInstance().output(document, XMLPath);     } catch (Exception e) {      }   }    private void instertChildNode() {     Document document = null;     try {       FileInputStream fin = new FileInputStream(XMLPath);       document = XMLParser.getInstance().getDomElement(fin);       // 在某个根节点下面添加节点       /**        *  180 22        * music//这句是新添加的         *        * */       Node root = document.getDocumentElement();       NodeList ftpnodes = root.getChildNodes();       Log.e("eee", root.getNodeName());// 根节点 blog       NodeList ftplist = ftpnodes.item(1).getChildNodes();       Node su = ftpnodes.item(1);       Log.e("eee", su.getNodeName());// message       Element e = (Element) ftpnodes.item(5);// message= wang       Log.e("eee", e.getAttribute("name"));       if (e.getAttribute("name").equals("wang")) {         Element elthoby = document.createElement("hobby");         Text txthoby = document.createTextNode("music");         elthoby.appendChild(txthoby);         Node stNode = document.getElementsByTagName("message").item(2);         stNode.appendChild(elthoby);       }       XMLParser.getInstance().output(document, XMLPath);     } catch (Exception e) {     }   }    private void removeNode() {     Document document = null;     try {       FileInputStream fin = new FileInputStream(XMLPath);       document = XMLParser.getInstance().getDomElement(fin);       // 删除blog下的message的0个节点       NodeList nl = document.getElementsByTagName("message");       Node nodeDel = (Element) nl.item(0);       nodeDel.getParentNode().removeChild(nodeDel);       XMLParser.getInstance().output(document, XMLPath);     } catch (Exception e) {     }   }    @Override   protected void onDestroy() {     super.onDestroy();   } } 

最后记得添加读写SDcard的权限!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多相关文章

  1. android 用ExpandableListView实现的文件目录树框架
  2. c++ for Android(安卓)----- ndk 编译链接 pthread 报错
  3. Android(安卓)dex2jar反编译失败
  4. Android(安卓)Activity之间跳转
  5. Android左右声道音频文件测试
  6. SharedPreference
  7. Android(安卓)获取assets的绝对路径
  8. Android(安卓)拍照添加时间水印
  9. 理解 Android(安卓)Build 系统

随机推荐

  1. 听说谷歌Baba更新了 Material UI ...
  2. Android移动view动画问题 关于view的位置
  3. Android(安卓)修改应用程序字体
  4. Android(安卓)“再按一次返回键退出程序
  5. Opengl ES系列学习--创建动态壁纸
  6. 一个同事的总结---防作弊。。。日后慢慢
  7. Android移动开发-添加手势以及识别用户手
  8. Android(安卓)物联网socket通信采坑
  9. android 系统核心机制binder(02)binder驱动
  10. Android(安卓)报错 - 无法解析类型 java.