ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 使用XmlPullParser处理Xml名称空间

2019-05-26 19:14:01  阅读:214  来源: 互联网

标签:java android xml-parsing xml xmlpullparser


这里我使用XmlPullParser来解析下面的文档.由于命名空间,它不起作用,我如何解析命名空间?

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
XmlPullParser xpp = factory.newPullParser();

xpp.setInput(in, HTTP.UTF_8);
String namespace = xpp.getNamespace();

boolean inMessage = false;

int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    //START TAGS
    if(eventType == XmlPullParser.START_TAG) {
        if(xpp.getName().equals(namespace+"resource")) {
            httpCode = Integer.valueOf( xpp.getAttributeValue(null, "code").trim() );
            type = xpp.getAttributeValue(null, "type").trim();
        } else if(xpp.getName().equals(namespace+"message")) {
            inMessage = true;
        }
    //TAG TEXT
    } else if(eventType == XmlPullParser.TEXT) {
        if(inMessage) {
            message = xpp.getText().trim();
            break; //CANCEL the iteration
        }
    } else if(eventType == XmlPullParser.END_TAG) {
        if(inMessage) {
            inMessage = false;
        }
    }
    eventType = xpp.next();
}

这是我要解析的文档类型的示例

<?xml version="1.0" encoding="UTF-8"?>
    <res:resource 
        xmlns:res="http://www.example.com/ns/server/resource"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.example.com/ns/server/resource resource.xsd "
        version="1" >
    <res:message httpCode="200" type="ok" >
        <![CDATA[Sample Success Response]]>
    </res:message>
    <dif:person 
        xmlns:dif="http://www.example.com/ns/server/resource"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.example.com/ns/server/person person.xsd "
        version="1" >
        <dif:name>test name</dif:name>
        <dif:description lang="en">test description</dif:description>
    </dif:person >
</res:resource>

我想分别解析res和dif.

解决方法:

您可以通过调用getPrefix方法来区分它们.一些测试代码:

try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();                     
        InputStream input = getResources().openRawResource(R.raw.test);
        parser.setInput(input, HTTP.UTF_8);     
        int eventType = parser.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT){             
            if(eventType == XmlPullParser.START_TAG){ 
                String prefix = parser.getPrefix();
                String name   = parser.getName();
                Log.i("XML", String.format("prefix=%s,name=%s",prefix,name));
                if( "dif".equals(prefix)){
                    handleDiff(parser);
                }else if ("res".equals(prefix)){
                    handleRes(parser);
                }
            }

            eventType = parser.next();
        }
    } catch (Exception e) {
        Log.e("XML","",e);
    }  

Logcat输出你的测试数据:

prefix=res,name=resource  
prefix=res,name=message  
prefix=dif,name=person  
prefix=dif,name=name  
prefix=dif,name=description  

标签:java,android,xml-parsing,xml,xmlpullparser
来源: https://codeday.me/bug/20190526/1157553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有