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

时间:2011-11-23 10:55:43

标签: android xml xml-parsing android-xmlpullparser

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

我的要求非常简单。示例文件类似于:

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

而我只想通过ID检索项目并阅读价格和数量。

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

2 个答案:

答案 0 :(得分: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

主要缺点是,如果您以后遇到更高级的数据,它可能会中断。例如,有人可能会向您发送带有注释的数据,或语法错误,或不带引号的属性,或使用&amp; quo;等等。

答案 1 :(得分:0)

您可以使用XmlPullParser进行首次解析。然后我建议将数据存储在sqlliteshared preferences中,具体取决于查询的复杂程度或数据大小。

https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html