【问题标题】:xml string parse in androidandroid中的xml字符串解析
【发布时间】:2015-09-30 13:29:37
【问题描述】:

我是 android 中的新 xml 解析。下面是我拥有的 xml 字符串。我从 onActivityResult 方法获取这个 XML 字符串数据。所以下面的数据保存在一个字符串变量中,比如 resultText;我想从下面的字符串中读取每个属性值。

<?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"/>

我想读取该单个节点的每个属性。提前致谢。

【问题讨论】:

  • 查看此答案:stackoverflow.com/a/7607445/2674225 您可以将其解析为 Node 并获取属性 (developer.android.com/reference/org/w3c/dom/…)。或者您可以简单地拆分它并手动读取属性,但它不太优雅;)
  • 感谢您的回复,但我没有收到您的回复。我想读取每个属性值。您提到的代码不完全属于相同的。如何通过拆分来实现这一目标?
  • 当你将这个 xm 解析到 Node 时,你将能够通过方法 getAttributes() 获取所有这个节点的属性,这将它们作为 NamedNodeMap 对象返回。您必须知道,everythinh 是一个节点 - 甚至属性也是节点。并且您拥有所有这些返回的对象。然后你可以简单地迭代它。在for 循环中,您可以通过obj.item(i) 访问属性并调用,例如。 getNodeName()getNodeValue().

标签: android xml parsing


【解决方案1】:

使用XMLParser(检查this page),一个很好用的是XmlPullParser

您可以使用以下命令初始化解析器:

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

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

比你可以遍历完整的 XML 对象使用

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

您可以在哪里查看eventTypesSTART_DOCUMENTSTART_TAGEND_TAGTEXT
一旦你在开始或结束标签中,你可以使用getName()获取标签的名称,在TEXT事件类型你可以使用getText(),你可以在BEGIN_TAG使用函数@987654336 @、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");

【讨论】:

  • 非常感谢。你节省了我的时间。正如我预期的那样工作出色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
相关资源
最近更新 更多