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

发布时间 - 2026-01-11 00:43:02    点击率:

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

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


# Android  # 操作XML  # 对XML基本操作  # 操作XML(增、删、改、查)  # Android 代码写控件代替XML简单实例  # Android XML設置屏幕方向(android:screenOrientation)详解  # Android常见XML转义字符(总结)  # Android XML数据的三种解析方式  # Android使用xml自定义图片实例详解  # 不存在  # 创建一个  # 遍历  # 用了  # 希望能  # 谢谢大家  # 这句  # 类中  # 在某个  # getElementsByTagName  # NodeList  # getValue  # item  # str  # void  # elem  # TransformerFactory  # transFactory  # node  # output 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现API版本控制_Laravel API版本化路由设计策略  动图在线制作网站有哪些,滑动动图图集怎么做?  如何获取免费开源的自助建站系统源码?  JS实现鼠标移上去显示图片或微信二维码  java中使用zxing批量生成二维码立牌  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何选择PHP开源工具快速搭建网站?  如何在阿里云ECS服务器部署织梦CMS网站?  如何用搬瓦工VPS快速搭建个人网站?  如何用腾讯建站主机快速创建免费网站?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  创业网站制作流程,创业网站可靠吗?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel怎么实现模型属性的自动加密  php 三元运算符实例详细介绍  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  C语言设计一个闪闪的圣诞树  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  详解vue.js组件化开发实践  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何在建站宝盒中设置产品搜索功能?  如何在万网ECS上快速搭建专属网站?  Laravel如何使用Blade组件和插槽?(Component代码示例)  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何注册花生壳免费域名并搭建个人网站?  如何获取PHP WAP自助建站系统源码?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  深入理解Android中的xmlns:tools属性  利用 Google AI 进行 YouTube 视频 SEO 描述优化  php485函数参数是什么意思_php485各参数详细说明【介绍】  javascript基于原型链的继承及call和apply函数用法分析  制作电商网页,电商供应链怎么做?  如何在腾讯云服务器上快速搭建个人网站?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】