android - xmlns : android parsing

标签 android xml

我正在尝试解析以下 XML 数据。我只需要 d:MessageId 和 d:SerialNumber。

<feed xmlns="http://www.w3.org/2005/Atom" ...>
<script id="tinyhippos-injected"/>
    <id>...</id>
    <title type="text">ViewError</title>
    <updated>2015-08-25T01:41:55Z</updated>
    <author>...</author>
    <link href="EDI_ViewError" rel="self" title="EDI_ViewError"/>
    <entry>...</entry>
    <entry>...</entry>
    <entry>
        <id>
            serveraddress
        </id>
        <title type="text">ViewError('ABCDEFG')</title>
        <updated>2015-08-25T01:41:55Z</updated>
        <category term="ViewError" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="ViewError('GSTU7417706')" rel="edit" title="ViewError"/>
        <content type="application/xml">
            <m:properties   xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
                <d:MessageId>msgId_1</d:MessageId>
                <d:SerialNumber>sernr_1</d:SerialNumber>
            </m:properties>
        </content>
    </entry>
    </feed>

我怎样才能做到这一点?我的安卓代码如下。

HTTP 部分:

HttpClient httpclient = new DefaultHttpClient();
String user = "username";
String pwd = "pass";
HttpGet httpGet = new     HttpGet("properhttplink");
httpGet.addHeader("Auth Header");
HttpResponse response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();

解析器部分:

XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
XmlPullParser myParser = xmlFactoryObject.newPullParser();
myParser.setInput(is, null);
String dee;
int event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT)
{
    String name=myParser.getName();
    switch (event){
        case XmlPullParser.START_TAG:
            break;
        case XmlPullParser.TEXT:
            break;
        case XmlPullParser.END_TAG:
            if(name.equals("d")){
                dee =  myParser.getAttributeValue(null,"value");
            }
            break;
    }
    event = myParser.next();
}

请注意 myParser.getEventType() 总是返回 "0"myParser.getName() 总是返回 "null ".

最佳答案

首先标签的名称是MessageId,不是dd 是标签的命名空间;命名空间用于区分名称相同但含义不同的标签。如果您的文档中没有 MessageId 的其他用途(即您永远不会在其他地方看到它与任何其他 namespace 一起使用),那么您可以有效地忽略它。

if ("MessageId".equals(parser.getName())) {

或者,如果命名空间真的很重要

if ("d".equals(parser.getNamespace()) && "MessageId".equals(parser.getName())) {

其次:您的代码使用了getAttributeValue(),但您尝试读取的内容是标签的文本内容,而不是标签的属性。您应该使用 getText()(如果当前事件是 TEXT)或 nextText()(如果当前事件是 START_TAG )。这导致我们...

第三:您无法阅读 END_TAG 事件中的文本。

我将从这里开始编写您的解析器代码:

XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
XmlPullParser parser = xmlFactoryObject.newPullParser();
parser.setInput(is, null);
String dee;
int event;
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
    switch (event) {
        case XmlPullParser.START_TAG:
            if ("MessageId".equals(parser.getName()) {
                dee = parser.nextText();
            }
            break;

        // TODO: other event types, if you care about them

    } // end switch
} // end while

关于android - xmlns : android parsing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195053/

相关文章:

android - 我找不到安卓主页图标

android - 如何修复错误 :Could not find com. google.gms : google-services: 3. 0.0.?

sql-server - SQL Server中具有可变特征的对象基于EAV或XML设计数据库?

android - Dagger2 中如何工作方法注入(inject)

android - 如何通过字符串值获取颜色 ID?

javascript - 使用 jQuery 构建 XML 请求的最快方法

ruby - 如何在不知道其名称的情况下使用其内容的正则表达式获取 XML 子标签

ruby - 如何使用 Ruby 和 Builder::XMLMarkup 模板生成 XML 文件?

Android 模拟从服务中按下回键

android - 保存以编程方式添加的方向更改 View ?