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源代码发行怎么设置权限_访问权限控制方法与实践【指南】
上一篇:《小猿口算》打印口算题方法
上一篇:《小猿口算》打印口算题方法

