如何获取android 下的StreamingAssets文件夹中的xml文件

如何获取android 下的StreamingAssets文件夹中的xml文件,第1张

第一种,使用SAXReader

[java] view plain copy

InputStream in = DBHelpergetDBHelper()getContext()getResources()

getAssets()open("provincexml");

InputStream is = IOHelperfromInputStreamToInputStreamInCharset(in,"utf-8");

SAXReader sr = new SAXReader();// 获取读取xml的对象。

Document document = srread(is);

Element root = documentgetRootElement();

当然,使用这种方法还是比较麻烦的,因为需要引入dom4j的jar包。

第二种,直接使用XmlPullParser

我们查看XmlResourceParser源码的时候,就会发现XmlResourceParser实现了两个接口,AttributeSet和XmlPullParser,而实际上XmlPullParser就是帮助我们去读xml文件的。

当然还是需要获得inputstream流,但是优势就是不用引入jar包而已。

[java] view plain copy

public void test(InputStream in) {

XmlPullParserFactory factory;

try {

factory = XmlPullParserFactorynewInstance();

factorysetNamespaceAware(true);

XmlPullParser xpp = factorynewPullParser();

xppsetInput(in, "UTF-8");

int evtType = xppgetEventType();

// 一直循环,直到文档结束

while (evtType != XmlPullParserEND_DOCUMENT) {

switch (evtType) {

case XmlPullParserSTART_TAG:

String tag = xppgetName();

Systemoutprintln(tag);

break;

case XmlPullParserEND_TAG:

break;

default:

break;

}

//获得下一个节点的信息

evtType = xppnext();

}

} catch (Exception e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

先判断浏览器,然后读取xml数据就可以了

//判断不同的浏览器

function InitMf()

{

var mf_change=false;

try {

mf_change = new ActiveXObject("Msxml2XML>

// 给你一个例子,你参考下

// java通过dom读写xml文件

 

/要读的xml文件

<xml version="10" encoding="GB2312">

<学生花名册>

  <学生 性别 = "男">

      <姓名>李华</姓名>

      <年龄>14</年龄>

  </学生>

  <学生 性别 = "男">

      <姓名>张三</姓名>

      <年龄>16</年龄> 

 </学生>

</学生花名册>  

 

package xml;

import javaioFileOutputStream;

import javaioOutputStreamWriter;

import javaioWriter;

import javautilIterator;

import javautilVector;

import javaxxmlparsersDocumentBuilder;

import javaxxmlparsersDocumentBuilderFactory;

import javaxxmltransformOutputKeys;

import javaxxmltransformResult;

import javaxxmltransformSource;

import javaxxmltransformTransformer;

import javaxxmltransformTransformerConfigurationException;

import javaxxmltransformTransformerException;

import javaxxmltransformTransformerFactory;

import javaxxmltransformdomDOMSource;

import javaxxmltransformstreamStreamResult;

import orgw3cdomDocument;

import orgw3cdomElement;

import orgw3cdomNode;

import orgw3cdomNodeList;

import orgw3cdomText;

public class DomTest {

 Vector students_Vector;

 private Vector readXMLFile(String file) throws Exception {

  DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();

  DocumentBuilder builder = dbfnewDocumentBuilder();

  Document doc = builderparse(file); // 获取到xml文件

  // 下面开始读取

  Element root = docgetDocumentElement(); // 获取根元素

  NodeList students = rootgetElementsByTagName_r("学生");

  students_Vector = new Vector();

  for (int i = 0; i < studentsgetLength(); i++) {

   // 一次取得每一个学生元素

   Element ss = (Element) studentsitem(i);

   // 创建一个学生的实例

   student stu = new student();

   stusetSex(ssgetAttribute("性别"));

   NodeList names = ssgetElementsByTagName_r("姓名");

   Element e = (Element) namesitem(0);

   Node t = egetFirstChild();

   stusetName(tgetNodeValue());

   NodeList ages = ssgetElementsByTagName_r("年龄");

   e = (Element) agesitem(0);

   t = egetFirstChild();

   stusetAge(IntegerparseInt(tgetNodeValue()));

   students_Vectoradd(stu);

  }

  return students_Vector;

 }

 // 写入xml文件

 public static void callWriteXmlFile(Document doc, Writer w, String encoding) {

  try {

   Source source = new DOMSource(doc);

   Result result = new StreamResult(w);

   Transformer xformer = TransformerFactorynewInstance()

     newTransformer();

   xformersetOutputProperty(OutputKeysENCODING, encoding);

   xformertransform(source, result);

  } catch (TransformerConfigurationException e) {

   eprintStackTrace();

  } catch (TransformerException e) {

   eprintStackTrace();

  }

 }

 private void writeXMLFile(String outfile) {

  DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();

  DocumentBuilder builder = null;

  try {

   builder = dbfnewDocumentBuilder();

  } catch (Exception e) {

  }

  Document doc = buildernewDocument();

  Element root = doccreateElement("学生花名册");

  docappendChild(root); // 将根元素添加到文档上

  // 获取学生信息

  for (int i = 0; i < students_Vectorsize(); i++) {

   student s = (student) students_Vectorget(i);

   // 创建一个学生

   Element stu = doccreateElement("学生");

   stusetAttribute("性别", sgetSex());

   rootappendChild(stu);// 添加属性   

   // 创建文本姓名节点

   Element name = doccreateElement("姓名");

   stuappendChild(name);

   Text tname = doccreateTextNode(sgetName());

   nameappendChild(tname);

   

   //创建文本年龄节点

   Element age = doccreateElement("年龄");

   stuappendChild(age); // 将age添加到学生节点上

   Text tage = doccreateTextNode(StringvalueOf(sgetAge()));

   ageappendChild(tage); // 将文本节点放在age节点上

  }

  try {

   FileOutputStream fos = new FileOutputStream(outfile);

   OutputStreamWriter outwriter = new OutputStreamWriter(fos);

   // ((XmlDocument)doc)write(outwriter); //出错!

   callWriteXmlFile(doc, outwriter, "gb2312");

   outwriterclose();

   fosclose();

  } catch (Exception e) {

   eprintStackTrace();

  }

 }

 public static void main(String args[]) {

  String str = "xml/studentxml";

  DomTest t = new DomTest();

  try {

   Vector v = treadXMLFile(str);

   Iterator it = viterator();

   while (ithasNext()) {

    student s = (student) itnext();

    Systemoutprintln(sgetName() + "\t" + sgetAge() + "\t"

      + sgetSex());

   }

  } catch (Exception e) {

   eprintStackTrace();

  }

  String outfile = "xml/stucopyxml";

  twriteXMLFile(outfile);

 }

}

class student{

 private String sex;

 private String name;

 private int age;

 public int getAge() {

  return age;

 }

 public void setAge(int age) {

  thisage = age;

 }

 public void setSex(String s){sex=s;}

 public String getSex(){return sex;}

 public void setName(String n){name=n;}

 public String getName(){return name;}

 }

Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件。> 2: 3: 4: 5:数据结构 6:严蔚敏 7:3000 8: 9: 10:路由型与交换型互联网基础 11:程庆梅 12:2700 13: 14: 15:计算机硬件技术基础 16:李继灿 17:2500 18: 19: 20:软件质量保证与管理 21:朱少民 22:3900 23: 24: 25:算法设计与分析 26:王红梅 27:2300 28: 29: 30:计算机 *** 作系统 31:7-111-19149-1 32:28 33: 34:为了方便读取,我还定义一个书的实体类,名为BookModel,具体内容如下: 1:using System; 2:using SystemCollectionsGeneric; 3:using SystemLinq; 4:using SystemText; 5: 6:namespace 使用XmlDocument 7: { 8:publicclass BookModel 9: { 10:public BookModel() 11: { } 12:/// 13:/// 所对应的课程类型 14:/// 15:privatestring bookType; 16: 17:publicstring BookType 18: { 19: get { return bookType; } 20: set { bookType = value; } 21: } 22: 23:/// 24:/// 书所对应的ISBN号 25:/// 26:privatestring bookISBN; 27: 28:publicstring BookISBN 29: { 30: get { return bookISBN; } 31: set { bookISBN = value; } 32: } 33: 34:/// 35:/// 书名 36:/// 37:privatestring bookName; 38: 39:publicstring BookName 40: { 41: get { return bookName; } 42: set { bookName = value; } 43: } 44: 45:/// 46:/// 作者 47:/// 48:privatestring bookAuthor; 49: 50:publicstring BookAuthor 51: { 52: get { return bookAuthor; } 53: set { bookAuthor = value; } 54: } 55: 56:/// 57:/// 价格 58:/// 59:privatedouble bookPrice; 60: 61:publicdouble BookPrice 62: { 63: get { return bookPrice; } 64: set { bookPrice = value; } 65: } 66: } 67: }1使用XmlDocument使用XmlDocument是一种基于文档结构模型的方式来读取XML文件在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树最开始的一个结点叫作根结点,每个结点都可以有自己的子结点得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性例如: 1: xn 代表一个结点 2: xnName;//这个结点的名称 3: xnValue;//这个结点的值 4: xnChildNodes;//这个结点的所有子结点 5: xnParentNode;//这个结点的父结点 6: 11 读取所有的数据使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件 1: XmlDocument doc = new XmlDocument(); 2: docLoad(@"\\Bookxml");然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值参看下面的代码 1:// 得到根节点bookstore 2: XmlNode xn = xmlDocSelectSingleNode("bookstore"); 3: 4: 5:// 得到根节点的所有子节点 6: XmlNodeList xnl = xnChildNodes; 7: 8:foreach (XmlNode xn1 in xnl) 9: { 10: BookModel bookModel = new BookModel(); 11:// 将节点转换为元素,便于得到节点的属性值 12: XmlElement xe = (XmlElement)xn1; 13:// 得到Type和ISBN两个属性的属性值 14: bookModelBookISBN = xeGetAttribute("ISBN")ToString(); 15: bookModelBookType = xeGetAttribute("Type")ToString(); 16:// 得到Book节点的所有子节点 17: XmlNodeList xnl0 = xeChildNodes; 18: bookModelBookName=xnl0Item(0)InnerText; 19: bookModelBookAuthor=xnl0Item(1)InnerText; 20: bookModelBookPrice=ConvertToDouble(xnl0Item(2)InnerText); 21: bookModeListAdd(bookModel); 22: } 23: dgvBookInfoDataSource = bookModeList;在正常情况下,上面的代码好像没有什么问题,但是对于读取上面的XML文件,则会出错,原因就是因为我上面的XML文件里面有注释,大家可以参看Bookxml文件中的第三行,我随便加的一句注释注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node)所以在把结点转换成元素的时候就会报错"无法将类型为“SystemXmlXmlComment”的对象强制转换为类型“SystemXmlXmlElement”。"幸亏它里面自带了解决办法,那就是在读取的时候,告诉编译器让它忽略掉里面的注释信息修改如下: 1: XmlDocument xmlDoc = new XmlDocument(); 2: XmlReaderSettings settings = new XmlReaderSettings(); 3: settingsIgnoreComments = true;//忽略文档里面的注释 4: XmlReader reader = XmlReaderCreate(@"\\Bookxml", settings); 5: xmlDocLoad(reader);最后读取完毕后,记得要关掉reader 1: readerClose();这样它就不会出现错误最后运行结果如下:12 增加一本书的信息向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性具体代码如下:加载文件并选出要结点: 1: XmlDocument doc = new XmlDocument(); 2: docLoad(@"\\Bookxml"); 3: XmlNode root = docSelectSingleNode("bookstore");创建一个结点,并设置结点的属性: 1: XmlElement xelKey = docCreateElement("book"); 2: XmlAttribute xelType = docCreateAttribute("Type"); 3: xelTypeInnerText = "adfdsf"; 4: xelKeySetAttributeNode(xelType);创建子结点: 1: XmlElement xelAuthor = docCreateElement("author"); 2: xelAuthorInnerText = "dfdsa"; 3: xelKeyAppendChild(xelAuthor);最后把book结点挂接在要结点上,并保存整个文件: 1: rootAppendChild(xelKey); 2: docSave(@"\\Bookxml");用上面的方法,是向已有的文件上追加数据,如果想覆盖原有的所有数据,可以更改一下,使用LoadXml方法: 1: XmlDocument doc = new XmlDocument(); 2: docLoadXml("");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据直接把根结点选择出来了,后面不用SelectSingleNode方法选择根结点,直接创建结点即可,代码同上13 删除某一个数据想要删除某一个结点,直接找到其父结点,然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,上面的SelectSingleNode可以传入一个Xpath表,我们通过书的ISBN号来找到这本书所在的结点如下: 1: XmlElement xe = xmlDocDocumentElement; // DocumentElement 获取xml文档对象的根XmlElement 2:string strPath = stringFormat("/bookstore/book[@ISBN=\"{0}\"]", dgvBookInfoCurrentRowCells[1]ValueToString()); 3: XmlElement selectXe = (XmlElement)xeSelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点 4: selectXeParentNodeRemoveChild(selectXe);"/bookstore/book[@ISBN=\"{0}\"]"是一个Xpath表达式,找到ISBN号为所选那一行ISBN号的那本书,有关Xpath的知识请参考:XPath 语法14 修改某要条数据修改某 条数据的话,首先也是用Xpath表达式找到所需要修改的那一个结点,然后如果是元素的话,就直接对这个元素赋值,如果是属性的话,就用SetAttribute方法设置即可如下: 1: XmlElement xe = xmlDocDocumentElement; // DocumentElement 获取xml文档对象的根XmlElement 2:string strPath = stringFormat("/bookstore/book[@ISBN=\"{0}\"]", dgvBookInfoCurrentRowCells[1]ValueToString()); 3: XmlElement selectXe = (XmlElement)xeSelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点 4: selectXeSetAttribute("Type", dgvBookInfoCurrentRowCells[0]ValueToString());//也可以通过SetAttribute来增加一个属性 5: selectXeGetElementsByTagName("title")Item(0)InnerText = dgvBookInfoCurrentRowCells[2]ValueToString(); 6: selectXeGetElementsByTagName("author")Item(0)InnerText = dgvBookInfoCurrentRowCells[3]ValueToString(); 7: selectXeGetElementsByTagName("price")Item(0)InnerText = dgvBookInfoCurrentRowCells[4]ValueToString(); 8: xmlDocSave(@"\\Bookxml");2使用XmlTextReader和XmlTextWriterXmlTextReader和XmlTextWriter是以流的形式来读写XML文件21XmlTextReader使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的 *** 作如下: 1: XmlTextReader reader = new XmlTextReader(@"\\Bookxml"); 2: List modelList = new List(); 3: BookModel model = new BookModel(); 4:while (readerRead()) 5: { 6: 7:if (readerNodeType == XmlNodeTypeElement) 8: { 9:if (readerName == "book") 10: { 11: modelBookType = readerGetAttribute(0); 12: modelBookISBN = readerGetAttribute(1); 13: } 14:if (readerName == "title") 15: { 16: modelBookName=readerReadElementString()Trim(); 17: } 18:if (readerName == "author") 19: { 20: modelBookAuthor = readerReadElementString()Trim(); 21: } 22:if (readerName == "price") 23: { 24: modelBookPrice = ConvertToDouble(readerReadElementString()Trim()); 25: } 26: } 27: 28:if (readerNodeType == XmlNodeTypeEndElement) 29: { 30: modelListAdd(model); 31: model = new BookModel(); 32: } 33: 34: 35: } 36: modelListRemoveAt(modelListCount-1); 37:thisdgvBookInfoDataSource = modelList;关键是读取属性的时候,你要先知道哪一个结点具有几个属性,然后通过GetAttribute方法来读取读取属性还可以用另外一种方法,就是用MoveToAttribute方法可参见下面的代码: 1:if (readerName == "book") 2: { 3:for (int i = 0; i < readerAttributeCount; i++) 4: { 5: readerMoveToAttribute(i); 6:string str = "属性:" + readerName + "=" + readerValue; 7: } 8: modelBookType = readerGetAttribute(0); 9: modelBookISBN = readerGetAttribute(1); 10: }效果如下:22XmlTextWriterXmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它将创建此文件首先设置一下,你要创建的XML文件格式, 1: XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"\\Book1xml", null); 2://使用 Formatting 属性指定希望将 XML 设定为何种格式。

以上就是关于如何获取android 下的StreamingAssets文件夹中的xml文件全部的内容,包括:如何获取android 下的StreamingAssets文件夹中的xml文件、js 如何读取xml文档内容、JAVA获取XML文件并输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9544424.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存