[英]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.