我想知道在Android中写入和解析XML文件的最简单方法是什么。
我的要求很简单。一个示例文件类似于:
<Item ID="1" price="$100" Qty="20" />
我只想通过ID检索商品并读取价格和数量。
我指的是使用XmlResourceParser来解析自定义编译的XML,但想知道是否有一种轻量级的方法来做一些琐碎的事情,因为这(仍然使用标签)。
如果真的那么简单,您可以使用printf()或类似的方法来编写。
对于解析,最好使用真正的XML解析器(也许是@netpork建议的SimpleXML)。但是对于如此琐碎的事情,您可以只使用正则表达式—这是我常用的集合,您主要需要'attrlist'和'stag'(用于属性列表和开始标记)。xname = "([_\w][-_:.\w\d]*)"; # XML NAME (imperfect charset)
xnmtoken = "([-_:.\w\d]+)"; #
xncname = "([_\w][-_.\w\d]*)"; #
qlit = '("[^"]*"|'[^']*')'; # Includes the quotes
attr = "$xname\s*=\s*$qlit"; # Captures name and value
attrlist = "(\s+$attr)*"; #
startTag = "<$xname$attrlist\s*/?>"; #
endTag = "</$xname\s*>"; #
comment = "(<!--[^-]*(-[^-]+)*-->)"; # Includes delims
pi = "(<?$xname.*??>)"; # Processing instruction
dcl = "(<!$xname\s+[^>]+>)"; # Markup dcl (imperfect)
cdataStart = "(<![CDATA[)"; # Marked section open
cdataEnd = "(]]>)"; # Marked section close
charRef = "&(#\d+|#[xX][0-9a-fA-F]+);"; # Num char ref (no delims)
entRef = "&$xname;"; # Named entity ref
pentRef = "%$xname;"; # Parameter entity ref
xtext = "[^<&]*"; # Neglects ']]>'
xdocument = "^($startTag|$endTag|$pi|$comment|$entRef|$xtext)+$";
XML规范的草案甚至包括了XML的"琐碎"语法,它可以正确地找到节点边界,但不能捕获所有错误,扩展实体引用等。见https://www.w3.org/tr/wd - xml - lang - 970630 # secF。
主要的缺点是,如果稍后遇到更花哨的数据,它可能会中断。例如,有人可能会给你发送带有注释的数据,或者语法错误,或者未加引号的属性,或者使用&quo;等等。
您可以使用XmlPullParser
进行首次解析。然后我建议根据查询的复杂性或数据的大小将数据存储在sqllite
或shared preferences
中。