【问题标题】:Easiest way to write and read an XML编写和读取 XML 的最简单方法
【发布时间】:2012-01-04 16:08:09
【问题描述】:

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

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

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

我只想通过 ID 检索商品并读取价格和数量。

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

【问题讨论】:

  • 如果你需要解析大量的 XML 数据,你可以试试Simple XML

标签: android xml xml-parsing android-xmlpullparser


【解决方案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; 等。

【讨论】:

    【解决方案2】:

    第一次解析可以使用XmlPullParser。然后我建议根据查询的复杂程度或数据的大小将数据存储在sqlliteshared preferences 中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多