2015-09-30 61 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