and android:解析xml,一个节点标签中,有多个属性,怎样解析?

android:解析xml,如下图,当一个节点中,含有多个属性,该怎样解析,取出属性值,求详细代码

定义好对象关系的类。


解析以Course为例子

public static List<Course> getCourseList(InputStream stream){
    List<Course> list=new ArrayList<Course>();
    
    //得到 DocumentBuilderFactory 对象, 由该对象可以得到 DocumentBuilder 对象
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    
    try {
        //得到DocumentBuilder对象
        DocumentBuilder builder=factory.newDocumentBuilder();
        //得到代表整个xml的Document对象
        Document document=builder.parse(stream);
        //得到 "根节点"
        Element root=document.getDocumentElement();
        //获取根节点的所有items的节点
        NodeList items=root.getElementsByTagName("item");  
        //遍历所有节点
        for(int i=0;i<items.getLength();i++){
            Course course=new Course();
            Element item=(Element)items.item(i);
            course.setName(item.getAttribute("name"));
            //再枚举子节点
            list.add(course);
        }
        
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    return list;
}

追问

能不能采用pull 解析方式

追答

都相似的


还是举例子

private List<Course> getData() {
    List<Course> list = new ArrayList<Course>();
    //XmlResourceParser xrp = getResources().getXml(R.xml.channels);

    try {
        // 直到文档的结尾处
        while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
            // 如果遇到了开始标签
            if (xrp.getEventType() == XmlResourceParser.START_TAG) {
                String tagName = xrp.getName();// 获取标签的名字
                if (tagName.equals("course")) {
                    Course  course= new Course;
                    course.setName( xrp.getAttributeValue(null, "name") );// 通过属性名来获取属性值
                    //再处理course的子节点
                    list.add(course);
                }
            }
            xrp.next();// 获取解析下一个事件
        }
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return list;
}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答