最简单的编写和读取XML的方法

9
我希望知道在Android中编写和解析XML文件的最简单方法。
我的需求非常简单。示例文件可能如下所示:
<Item ID="1" price="$100" Qty="20" />

我只想通过ID检索项目并读取价格和数量。
我参考了使用XmlResourceParser解析自定义编译的XML,但想知道是否有更轻量级的方法来处理这样微不足道的事情(仍然使用标签)。

1
如果您需要解析大量的XML数据,可以尝试使用Simple XML - netpork
2个回答

1
如果真的很简单,你可以使用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等的数据。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接