2011-11-23 24 views
9

Tôi muốn biết cách dễ nhất để viết và phân tích cú pháp tệp XML trong Android là gì.Cách dễ nhất để viết và đọc một XML

Yêu cầu của tôi rất đơn giản. Tệp mẫu sẽ có dạng như sau:

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

Và tôi chỉ muốn truy xuất một mục theo ID và đọc giá và số lượng.

Tôi đã đề cập đến Using XmlResourceParser to Parse Custom Compiled XML, nhưng tự hỏi nếu có một cách nhẹ nhàng để làm điều gì đó tầm thường như thế này (vẫn còn sử dụng thẻ).

+1

Nếu bạn cần phân tích rất nhiều dữ liệu XML, bạn có thể thử [Simple XML] (http://simple.sourceforge.net/). – netpork

Trả lời

0

Nếu nó thực sự đơn giản, bạn chỉ có thể viết nó bằng printf() hoặc tương tự.

Để phân tích cú pháp, bạn nên sử dụng trình phân tích cú pháp XML thực sự (có lẽ là SimpleXML mà @netpork đề xuất). Nhưng đối với một cái gì đó thực sự tầm thường này, bạn chỉ có thể sử dụng regexes - đây là tập bình thường của tôi, từ đó bạn cần chủ yếu là 'attrlist' và 'stag' (cho danh sách thuộc tính và start-tag).

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

Một dự thảo của spec XML thậm chí bao gồm một "tầm thường" ngữ pháp cho XML, có thể tìm thấy ranh giới nút một cách chính xác, nhưng không bắt tất cả các lỗi, mở rộng tham chiếu thực thể, vv Xem https://www.w3.org/TR/WD-xml-lang-970630#secF.

Hạn chế chính là nếu bạn chạy vào dữ liệu fancier sau này, nó có thể bị hỏng. Ví dụ: ai đó có thể gửi cho bạn dữ liệu có nhận xét trong đó hoặc lỗi cú pháp hoặc thuộc tính không được trích dẫn hoặc sử dụng &quo; hoặc bất kỳ điều gì.

Các vấn đề liên quan