簡體   English   中英

xmlns:android解析

[英]xmlns : android parsing

我試圖解析下面的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>

我該如何實現? 我的Android代碼如下。

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 ,而不是d d是標簽的名稱空間; 名稱空間用於區分名稱相同但含義不同的標記。 如果您的文檔中沒有MessageId其他用途(即,您將永遠不會在其他任何命名空間中看到它),那么您可以有效地忽略它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM