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 < 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
      /**
       * <message name="wang"> <hight>180</hight> <age>22</age> </message>
       *
       * */
      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);
      // 在某个根节点下面添加节点
      /**
       * <message name="wang"> <hight>180</hight> <age>22</age>
       * <hobby>music</hobby>//这句是新添加的 </message>
       *
       * */
      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的权限!

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

(0)

相关推荐

  • Android XML数据的三种解析方式

    本篇文章包含以下内容: XML数据的Dom解析      XML数据的Sax解析      XML数据的Pull解析      Activity中使用三种解析      Sax解析与Pull解析区别 三种解析方式的步骤: 1.在Assets文件夹中模拟创建XML数据 2.创建对应XML的Bean对象 3.开始解析 XML数据的Dom解析 DOM解析XML文件时,会将XML文件的所有内容读取到内存中(内存的消耗比较大),然后允许您使用DOM API遍历XML树.检索所需的数据 一.在Assets文

  • Android常见XML转义字符(总结)

    在安卓开发中我们经常会遇到一些特殊字符,这些特殊字符在程序中无法直接写,那么如何显示这些字符呢?这里就需要使用转义字符,所有编程语言,拥有转义字符的原因基本上是两点: 一.使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号.所以只能用转义字符来表示 . 二.某一些特定的字符在编辑语言中被定义为特殊用途的字符.这些字符由于被定义为特殊用途,它们失去了原有的意义. 以下为部分XML标志符的数字和字符串转义符: "     双引号    (

  • Android 代码写控件代替XML简单实例

    Android 代码写控件代替XML简单实例 简单的一个Button控件的练习. 实现代码: Button btn = new Button(HandlerToActivity.this); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; param

  • Android XML設置屏幕方向(android:screenOrientation)详解

    Android  XML設置屏幕方向(android:screenOrientation)详解 注意:Android只支持270度旋转. <activity android:name=".MyActivity" android:label="@string/app_name" android:screenOrientation="portrait"> android:screenOrientation设定该活动的方向, 该值可以是任何

  • Android使用xml自定义图片实例详解

    Android使用xml自定义图片实例详解 实现效果图: 白色圆角图片 bg_round_rectangle_white.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-

  • 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(); H

  • 简单的php数据库操作类代码(增,删,改,查)

    数据库操纵基本流程为: 1.连接数据库服务器 2.选择数据库 3.执行SQL语句 4.处理结果集 5.打印操作信息 其中用到的相关函数有 •resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] ) 连接数据库服务器•resource mysql_pconnect ( [string server [, strin

  • Struts2实现CRUD(增 删 改 查)功能实例代码

    CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影.如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了,所以大家使用新框架开发OLTP(Online Transaction Processing)应用程序时,首先会研究一下如何编写CRUD.这类似于大家在学习新编程语言时喜欢编写"Hello World". 本文旨在讲述Struts 2上的CRUD开发,所以为了例子的简单易懂,我不会花时间在数

  • asp.net中XML如何做增删改查操作

    一.简单介绍 using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml")); //指定一个节点 XmlNode root=xml.SelectSingleNode("/root"); //获取节点下所有直接

  • Python3操作MongoDB增册改查等方法详解

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. 在这一节中,我们就来看看Python 3下MongoDB的存储操作. 1. 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库. 2. 连接MongoDB 连接MongoDB时,我们需要使用PyMongo库里面的MongoClient.一般来说,传入Mong

  • Python连接SQLite数据库并进行增册改查操作方法详解

    SQLite简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开

  • oracle监控某表变动触发器例子(监控增,删,改)

    使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中. 代码: 复制代码 代码如下: create or replace trigger test_trigger    before insert or update or delete on test_table    for each row  declare    v_id        varchar2(30);    v_bdlb      varchar2(1);    v_jgdm      VARCHAR2(

  • 详解Android中一些SQLite的增删改查操作

    在Android开发中经常要涉及到对数据的操作.Android本身提供了四种数据存储方式.包括:SharePreference,SQLite,Content Provider,File. 在Android,数据都是么私有的,要实现数据共享,正确方式是使用Content Provider. SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式.Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API. Sha

  • 使用DataTable更新数据库(增,删,改)

    1.修改数据 复制代码 代码如下: DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Text);            //DataRow dr = hRDataSet.Tables["emp"].Select("id="+textBox3.Text)[0];            dr.BeginEdit();            dr["name"] = t

  • JS操作图片(增,删,改) 例子

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></titl

随机推荐