2011-11-23 54 views
9

我想知道在Android中写入和解析XML文件的最简单方法是什么。写入和读取XML的最简单方法

我的要求很简单。示例文件会是这样的:

<Item ID="1" price="$100" Qty="20" /> 

而我只想检索一个项目的ID和读取价格和数量。

我指的是Using XmlResourceParser to Parse Custom Compiled XML,但想知道是否有一个轻量级的方法来做一些微不足道的事情(仍然使用标签)。

+1

如果您需要解析大量XML数据,您可以尝试[Simple XML](http://simple.sourceforge.net/)。 – netpork

回答

0

如果真的那么简单,你可以用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;或其他。

相关问题