欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年04月18日 17:20:30   投稿:lqh  
這篇文章主要介紹了Android中XML的基本操作(增、刪、改、查)的相關(guān)資料,需要的朋友可以參考下

Android中XML的一些操作

解析類:

// 構(gòu)造方法 
  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; 
  } 
 
  /** 
   * 獲取節(jié)點值 
   * 
   * @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 ""; 
  } 
 
  /** 
   * 獲取節(jié)點值 
   * 
   * @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文件有更新后,調(diào)用此方法 
  public void output(Document node, String filename) { 
    TransformerFactory transFactory = TransformerFactory.newInstance(); 
    try { 
      Transformer transformer = transFactory.newTransformer(); 
      // 設(shè)置各種輸出屬性 
      transformer.setOutputProperty("encoding", "UTF-8"); 
      transformer.setOutputProperty("indent", "yes"); 
      DOMSource source = new DOMSource(node); 
      // 將待轉(zhuǎn)換輸出節(jié)點賦值給DOM源模型的持有者(holder) 
      // /source.setNode(node); 
      StreamResult result = new StreamResult(); 
      if (filename == null) { 
        // 設(shè)置標(biāo)準(zhǔn)輸出流為transformer的底層輸出目標(biāo) 
        result.setOutputStream(System.out); 
      } else { 
        result.setOutputStream(new FileOutputStream(filename)); 
      } 
      // 執(zhí)行轉(zhuǎn)換從源模型到控制臺輸出流 
      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");// 創(chuàng)建目錄 
      File f = new File(Filepath);// 創(chuàng)建文件 
      if (!path.exists()) {// 目錄不存在返回false 
        path.mkdirs();// 創(chuàng)建一個目錄 
      } 
      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(); 
        }// 創(chuàng)建一個文件 
      } 
 
    } 
    return true; 
  } 
 
  private static XMLParser uniqueInstance = null; 
 
  public static XMLParser getInstance() { 
    if (uniqueInstance == null) { 
      uniqueInstance = new XMLParser(); 
    } 
    return uniqueInstance; 
  } 
} 

上面的這個類中用了單例!分別定義了XML的創(chuàng)建,獲取XML的節(jié)點值,更新后執(zhí)行的操作!

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); 
  } 
 
  // 自動創(chuàng)建XML 
  private void createXml() { 
    // sdcard/test/message.xml 
    XMLParser.getInstance().Write(XMLPath, 
        XMLParser.getInstance().writeXml()); 
  } 
 
  // 遍歷節(jié)點,找到特定節(jié)點并進(jìn)行更換! 
  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());// 根節(jié)點 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) { 
 
    } 
  } 
 
  // 添加一個新的根節(jié)點 
  private void insertNode() { 
    Document document = null; 
    try { 
      FileInputStream fin = new FileInputStream(XMLPath); 
      document = XMLParser.getInstance().getDomElement(fin); 
      // 插入根節(jié)點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); 
      // 在某個根節(jié)點下面添加節(jié)點 
      /** 
       * <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());// 根節(jié)點 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個節(jié)點 
      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的權(quán)限!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android獲取周圍WIFI熱點服務(wù)

    Android獲取周圍WIFI熱點服務(wù)

    這篇文章主要為大家詳細(xì)介紹了Android獲取周圍WIFI熱點服務(wù)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • android Imageview 圖片覆蓋具體實現(xiàn)

    android Imageview 圖片覆蓋具體實現(xiàn)

    android Imageview 圖片覆蓋實現(xiàn)及注意事項如下,感興趣的朋友可以參考下哈
    2013-06-06
  • android自定義view實現(xiàn)推箱子小游戲

    android自定義view實現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了android自定義view實現(xiàn)推箱子小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android?Jetpack庫剖析之LiveData組件篇

    Android?Jetpack庫剖析之LiveData組件篇

    LiveData是Jetpack組件的一部分,更多的時候是搭配ViewModel來使用,相對于Observable,LiveData的最大優(yōu)勢是其具有生命感知的,換句話說,LiveData可以保證只有在組件( Activity、Fragment、Service)處于活動生命周期狀態(tài)的時候才會更新數(shù)據(jù)
    2022-07-07
  • Android 保存Fragment 切換狀態(tài)實例代碼

    Android 保存Fragment 切換狀態(tài)實例代碼

    本文主要介紹Android Fragment的應(yīng)用,這里給大家用實例代碼詳細(xì)介紹了Android Fragment 切換狀態(tài),有需要的小伙伴可以參考下
    2016-07-07
  • Android開發(fā)技巧之我的菜單我做主(自定義菜單)

    Android開發(fā)技巧之我的菜單我做主(自定義菜單)

    Android SDK本身提供了一種默認(rèn)創(chuàng)建菜單的機制,雖然功能上還不錯,但是界面的美觀度不是很理想,本結(jié)介紹一種實現(xiàn)方法:就是通過onKeyDown事件方法和PopupWindow實現(xiàn)自定義的菜單,感興趣的朋友可以了解下
    2013-01-01
  • 解析Android中的Serializable序列化

    解析Android中的Serializable序列化

    這篇文章主要介紹了Android中的Serializable序列化技術(shù),通過Serializable可以需要的朋友可以參考下
    2016-03-03
  • android中NFC讀寫功能的實現(xiàn)方法

    android中NFC讀寫功能的實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了android中NFC讀寫功能的實現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • AndroidX下使用Activity和Fragment的變化詳解

    AndroidX下使用Activity和Fragment的變化詳解

    這篇文章主要介紹了AndroidX下使用Activity和Fragment的變化詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Android程序開發(fā)之使用Design包實現(xiàn)QQ動畫側(cè)滑效果和滑動菜單導(dǎo)航

    Android程序開發(fā)之使用Design包實現(xiàn)QQ動畫側(cè)滑效果和滑動菜單導(dǎo)航

    這篇文章主要介紹了Android程序開發(fā)之使用Design包實現(xiàn)QQ動畫側(cè)滑效果和滑動菜單導(dǎo)航的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07

最新評論