热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中XML的基本操作(增、删、改、查)

这篇文章主要介绍了Android中XML的基本操作(增、删、改、查)的相关资料,需要的朋友可以参考下

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  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的权限!

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


推荐阅读
  • Android的四种启动模式
     对Android的启动模式不是很了解,这里记录下简单的理解内容以便日后查看。 Androi的四种启动模式分别为:standard,singleTop,singleTask,sing ... [详细]
  • 一、使用ContentProvider(内容提供者)共享数据ContentProvider在android中的作用是对外共享数据,也就是说 ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
  • Adapter相当于C(Controller,控制器),listView相当于V(View,视图)用于显示数据为ListView提供数据的List,数组或数据库相当于MVC模式中的 ... [详细]
  • 大数据分析Python有哪些爬虫框架
    一、ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用 ... [详细]
  • hibernate映射组件映射
    在Hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),compo ... [详细]
  • 在ROS系统中,参数读写一般通过xml或者yaml格式的文件,其中yaml用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。对于yaml文件,ros中用的较早版本的yaml- ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • 把Bean注入到IOC容器里面的方式有7种方式:使用xml的方式来声明Bean的定义,Spring容器在启动的时候会加载并解析这个xml, ... [详细]
  • 今天在使用springboot整合mybatis时一直无法注入mapper,不管怎么配置注解扫描包等,都不行,移动了Application ... [详细]
  • 微信小程序官方组件展示之表单组件input源码
    以下将展示微信小程序之表单组件input源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:输入框。该组件是原生组件, ... [详细]
  • [字符编码]Numeric Character Reference和HTML Entities(一)
    你是否在dreamweaver里编辑网页的时候看到Σ这样的东西,你曾使用过 这样的玩意吧,或者你在调试webservice的时候看到返回xml字符串中现 ... [详细]
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • pdf怎么把html变成pdf1 用AdobeAcroat8.1.2,打开网页后,页面右键菜单中会出现一个“转换为AobePDF的选项,点击就可以转换。 安装AdobeAcroba ... [详细]
author-avatar
爱唱歌的郭少文_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有