Android SAXParse在标签之间获取价值

时间:2013-08-07 03:37:55

标签: android xml-parsing sax

我有一个XML文件,我正在通过SAXParser阅读,但我无法正确阅读它。 XML的结构如下:

<game>
  <players>
    <player>
      <name>Player 1</name>
      <score>100</score>
    </player>
  </players>
</game>

如何让Android SAXParser读取标签之间的值?这是我的代码,但它正在寻找标签的属性,而不是文本之间的文本。

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

    if(localName.equals("name")) {
        names.add(attributes.getValue("name"));
    }
    else if(localName.equals("score")) {    
        scores.add(Integer.parseInt(attributes.getValue("score")));
    }

}

1 个答案:

答案 0 :(得分:0)

从示例@

中提取

http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

有关sax @

的更多信息

http://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html

除了sax之外,你应该看一下推荐的xmllpullparser。

从文档中引用。

我们建议使用XmlPullParser,这是一种在Android上解析XML的高效且可维护的方式

检查链接@

http://developer.android.com/training/basics/network-ops/xml.html

public void readxml(){ 
        try {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();

        DefaultHandler handler = new DefaultHandler() {

        boolean bname = false;
        boolean bscore = false;


        public void startElement(String uri, String localName,String qName, 
                    Attributes attributes) throws SAXException {

            if (qName.equalsIgnoreCase("name")) {
                bname = true;
            }

            if (qName.equalsIgnoreCase("score")) {
                bscore = true;
            }
        }

        public void endElement(String uri, String localName,
            String qName) throws SAXException {

        }

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

            if (bname) {
                Toast.makeText(getApplicationContext(), new String(ch, start, length), 10000).show();
                bname = false;
            }

            if (bscore) {
                Toast.makeText(getApplicationContext(), new String(ch, start, length), 10000).show();
                bscore = false;
            }
        }
      };

           saxParser.parse("myxmltoparse", handler);

         } catch (Exception e) {
           e.printStackTrace();
         }

       }
}