2012-10-23 69 views
1

如何使用本地XML解析根據特定條件顯示XML標記值。根據特定條件解析本地xml文件數據

E.g.我有這個XML文件存儲在文件夾中的資產,

<language> 
<languagename>English</languagename> 
<contact>EContact</contact> 
<update>EUpdate</update> 
</language> 

<language> 
<languagename>Hebrew</languagename> 
<contact>HContact</contact> 
<update>HUpdate</update> 
</language> 

我有兩個按鈕,當我點擊我的英語要顯示的數據對於英語,當我點擊希伯來文,我想只顯示希伯來語。請提供幫助。

謝謝

+0

使用SAXParser的構建一個Language類的對象並將它們存儲在一個Hashmap中,其中語言是鍵,其他信息是值。 – chaitanya

+0

謝謝chaitanya,我想你可以給我一個示例,因爲我是新鮮的android。 – Pritam

回答

1

這是XML解析器函數它將XML作爲字符串。

public class XMLParser { 
    public static void parser(String s) { 
     try { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 
      MyXMLhandler h = new MyXMLhandler(); 
      xr.setContentHandler(h); 
     // Log.e("string", s); 
      xr.parse(new InputSource(new StringReader(s))); 

     } catch (ParserConfigurationException e) { 
      Log.e("ParserError", e.getMessage()); 
     } catch (SAXException e) { 
      Log.e("SAXError", e.getMessage()); 
     } catch (IOException e) { 
      Log.e("IOError", e.getMessage()); 
     } 

    } 
} 

使用此處理程序類中提取信息u需要:

public class MyXMLhandler extends DefaultHandler { 
private boolean language = false; 
private boolean languagename = false; 
private boolean contact = false; 
private boolean update = false; 


@Override 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
    if (localName.equalsIgnoreCase("language")) { 
     language = true; 
    } else if (localName.equalsIgnoreCase("languagename")) { 
     languagename = true; 
    } else if (localName.equalsIgnoreCase("contact")) { 
     contact = true; 
    } else if (localName.equalsIgnoreCase("update")) { 
     update = true; 
    } 
} 

@Override 
public void endElement(String uri, String localName, String qName) 
     throws SAXException { 
    if (localName.equalsIgnoreCase("language")) { 
     language = false; 
    } else if (localName.equalsIgnoreCase("languagename")) { 
     languagename = false; 
    } else if (localName.equalsIgnoreCase("contact")) { 
     contact = false; 
    } else if (localName.equalsIgnoreCase("update")) { 
     update = false; 
    } 
} 

@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 

    if (language == true) { 
     String s = new String(ch, start, length); 

     Log.w("Language", s); 

    } 
    if (languagename == true) { 
     String s = new String(ch, start, length); 

     Log.w("Languagename", s); 

    } 
    if (contact == true) { 
     String s = new String(ch, start, length); 

     Log.w("contact", s); 

    } 
    if (update == true) { 
     String s = new String(ch, start, length); 

     Log.w("update", s); 

    } 

} 

}

使用此功能之上,並對其進行修改以解決烏爾問題

+0

謝謝@Sheraz Khilji – Pritam

+0

如果你的問題解決了,請回答我的答案 –

+0

Sory我不知道,因爲我沒有足夠的聲望。感謝您的支持。 – Pritam