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的权限!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍asp.net中XML如何做增删改查操作,包括了asp.net中XML如何做增删改查操作的使用技巧和注意事项,需要的朋友参考一下 一、简单介绍 二、具体实例 在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: 1,创建到服务器同名目录下的xml文件: 方法一: /////////////////////////////////
本小节将介绍 Django 的 ORM 模型中对表的增删改查操作,主要针对的是 MySQL 数据库,且操作的表是前面创建的 Member 表。所有的操作将在 Django 的 shell 模式下进行,只需要在 settings.py 中配置好对应的数据库信息即可。 1. Django ORM 模型的增删改查操作 话不多说,直接进入 django 的交互命令模式: [root@server ~]#
本文向大家介绍CodeIgniter框架基本增删改查操作示例,包括了CodeIgniter框架基本增删改查操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了CodeIgniter框架基本增删改查操作。分享给大家供大家参考,具体如下: 对于codeigniter的增删改,在此我用自己的一个例子来说明一下: 创建数据库: Model MTest.php Controller home.p
主要内容:插入记录,修改记录,删除记录,查询数据接下来,我们将介绍 Hibernate 是如何实现对数据库的增删改查(CRUD)操作的。 插入记录 Hibernate 在 Session 接口中为我们提供了一个 save() 方法,该方法可以向据库表中插入记录。 1. 在测试类 MyTest 中,创建一个名称为 testInsert 的方法,代码如下。 2. 运行测试方法 testInsert(),控制台输出如下。 3. 查询数据库 user
一、前言 在第二章《Memcached源码分析 - Memcached源码分析之命令解析(2)》 和第三章《Memcached源码分析 - Memcached源码分析之消息回应(3)》 中我们主要通过Memcached的get命令,分析了Memcached的命令解析和消息回应的模块功能。这一章,我们主要来详细看一下Memcached常用的增删改查操作。 在看Memcached的增删改查操作前,我们
本文向大家介绍node.js操作mysql(增删改查),包括了node.js操作mysql(增删改查)的使用技巧和注意事项,需要的朋友参考一下 最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图模板是jad