2015-09-30 91 views
1

我是android中新的xml解析。下面是我有的xml字符串。我從onActivityResult方法獲取這個XML字符串數據。因此將下面的數據保存在一個字符串變量(如resultText)中;我想從下面的字符串讀取每個屬性值。android中的xml字符串解析

<?xml version="1.0" encoding="UTF-8"?> 
<PrintLetterBarcodeData uid="521007171049" 
name="Bandigari Katamaraju" 
gender="M" 
yob="1991" 
co="S/O: BANDIGARI YADAGIRI" 
house="4-141/1" 
loc="EDULLAGUDEM" 
vtc="Edullagudam" 
dist="Nalgonda" 
subdist="For New VTC" 
state="Andhra Pradesh" 
pc="508112"/> 

我想讀取該單個節點的每個屬性。提前致謝。

+1

結帳這樣的回答:http://stackoverflow.com/a/7607445/2674225您可以分析它到'節點'並獲取屬性(http://developer.android.com/reference/org/w3c/dom/Node.html#getAttributes())。 或者您可以簡單地拆分它並手動讀取屬性,但它不那麼優雅;) – rzysia

+0

感謝您的回覆,但我沒有得到你。我想讀取每個屬性值。你提到的代碼不完全屬於同一個。我如何通過拆分來實現這一點? – katamaraju

+0

當你將這個xm解析爲Node時,你將能夠通過方法'getAttributes()'得到所有這個節點屬性,它將把它們作爲'NamedNodeMap'對象返回。你必須知道,everythinh是一個節點 - 甚至attibutes都是節點。而且你把它們全部放在這個返回的對象中。然後你可以簡單地迭代它。在'for'循環中,你可以通過'obj.item(i)'和call來訪問屬性。 'getNodeName()'或'getNodeValue()'。 – rzysia

回答

0

使用XMLParser(檢查this page),很好地工作的是XmlPullParser

您可以初始化解析器:

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

xpp.setInput(new StringReader ("<foo>Hello World!</foo>")); 

比你可以在使用

int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    /*YOUR CODE HERE*/ 
    eventType = xpp.next(); 
} 

完整XML對象在哪裏,你可以檢查迭代eventTypesSTART_DOCUMENTSTART_TAGEND_TAG,和TEXT
一旦你在開始或結束標籤,你可以得到使用getName()標籤的名稱,在TEXT事件類型,你可以使用getText(),你可以使用,在BEGIN_TAG,功能getAttributeCount()getAttributeName(index)getAttributeValue()你可以得到屬於每個標籤的所有屬性。


在您的具體情況

您可以使用這樣的事情:

String xmlString = YOURSTRING_HERE; 
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
factory.setNamespaceAware(true); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(new StringReader (xmlString)); 
int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    if(eventType == XmlPullParser.START_DOCUMENT) { 
     System.out.println("Start document"); 
    } else if(eventType == XmlPullParser.START_TAG) { 
     System.out.println("Start tag "+xpp.getName()); 
     if (xpp.getName().equals("PrintLetterBarcodeData")){ 
      for (int i=0; i<xpp.getAttributeCount(); i++){ 
       System.out.println("attribute:"+xpp.getAttributeName(i)+" with value: "+xpp.getAttributeValue(i)) 
       //Store here your values in the variables of your choice. 
      } 
     } 
    } else if(eventType == XmlPullParser.END_TAG) { 
     System.out.println("End tag "+xpp.getName()); 
    } else if(eventType == XmlPullParser.TEXT) { 
     System.out.println("Text "+xpp.getText()); 
    } 
    eventType = xpp.next(); 
} 
System.out.println("End document"); 
+0

非常感謝。你節省了我的時間。像我期望的那樣精湛的工作。 – katamaraju