2011-11-23 13 views
9

Mi piacerebbe sapere qual è il modo più semplice per scrivere e analizzare un file XML in Android.Il modo più semplice per scrivere e leggere un XML

Il mio requisito è molto semplice. Un esempio di file sarebbe qualcosa di simile:

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

E ho solo voglia di recuperare un elemento dal ID e leggere prezzo e Quantità.

Mi riferivo a Using XmlResourceParser to Parse Custom Compiled XML, ma mi chiedo se c'è un modo molto leggero per fare qualcosa di banale come questo (usando ancora i tag).

+1

Se è necessario analizzare molti dati XML, è possibile provare [Simple XML] (http://simple.sourceforge.net/). – netpork

risposta

0

Se è davvero così semplice, puoi semplicemente scriverlo con printf() o simile.

Per l'analisi, è meglio utilizzare un parser XML reale (forse il SimpleXML suggerito da @netpork). Ma per qualcosa di veramente così banale, potresti semplicemente usare regex: ecco il mio solito set, dal quale ti serviranno principalmente 'attrlist' e 'stag' (per elenco di attributi e tag di inizio).

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

Una bozza della specifica XML inclusa anche una grammatica "banale" per XML, che può trovare i confini dei nodi in modo corretto, ma non cattura tutti gli errori, espansione riferimenti ad entità, etc. Vedi https://www.w3.org/TR/WD-xml-lang-970630#secF.

Lo svantaggio principale è che se si eseguono dati più elaborati in un secondo momento, potrebbe interrompersi. Ad esempio, qualcuno potrebbe inviarti dei dati con un commento, oppure un errore di sintassi o un attributo non quotato o utilizzando &quo; o altro.