2011-11-23 14 views
9

Me gustaría saber cuál es la forma más fácil de escribir y analizar un archivo XML en Android.La manera más fácil de escribir y leer un XML

Mi requisito es muy simple. Un archivo de ejemplo sería algo así como:

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

Y sólo quiero recuperar un elemento por el ID y leer precio y Cant.

Me estaba refiriendo a Using XmlResourceParser to Parse Custom Compiled XML, pero me pregunto si hay una manera mucho más liviana de hacer algo trivial como esto (aún usando etiquetas).

+1

Si necesita analizar muchos datos XML, puede probar [Simple XML] (http://simple.sourceforge.net/). – netpork

Respuesta

0

Si es realmente así de simple, puede simplemente escribirlo con printf() o similar.

Para el análisis, es mejor utilizar un analizador XML real (tal vez el SimpleXML que @netpork sugirió). Pero para algo realmente tan trivial, podrías usar expresiones regulares: este es mi set habitual, del que necesitarías principalmente 'attrlist' y 'stag' (para la lista de atributos y la etiqueta de inicio).

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)+\$"; 

Un borrador de la especificación XML incluso incluía una gramática "trivial" para XML, que se pueden encontrar límites nodo correctamente, pero no atrapar todos los errores, la ampliación de las referencias de entidades, etc. Ver https://www.w3.org/TR/WD-xml-lang-970630#secF.

El principal inconveniente es que si se topa con datos más elegantes más adelante, puede romperse. Por ejemplo, alguien podría enviarle datos con un comentario allí, o un error de sintaxis, o un atributo sin comillas, o usando &quo;, o lo que sea.

Cuestiones relacionadas