根据特定条件解析本地xml文件数据

根据特定条件解析本地xml文件数据

问题描述:

如何使用本地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

这是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