java - Android Xml解析 "embedded values"

标签 java android xml-parsing

我很难弄清楚如何解析这个数据 block :

<prov version="1.1">
  <characteristic type="section1">
    <parm name="version" value="74"/>
    <parm name="validity" value="172800"/>
  </characteristic>
...
  <characteristic type="section99">
    <parm name="random_setting1" value="blahblah1"/>
    <parm name="random_setting2" value="blahblah2"/>
    <characteristic type="section99_subsection2">
      <parm name="random_setting3" value="blahblah1"/>
      <parm name="random_setting4" value="blahblah2"/>
    </characteristic> 
  </characteristic>
</prov>

我的 xml 文件中可能有 200 多行,类似于上面的示例。我想将其分成 4 个字段以放入数据库中:

一级特征

二级特征(可以为空)

设置名称

但我一生都无法弄清楚如何做到这一点。

我有这个文档生成器:

        Log.d("RNM", "Starting xmlToDb");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document xmlParse = dBuilder.parse(new InputSource(new StringReader(xmlString)));
        xmlParse.getDocumentElement().normalize();
        NodeList nList = xmlParse.getElementsByTagName("characteristic");
        for ( int tmp = 0; tmp < nList.getLength(); tmp++) {
            Node nNode = nList.item(tmp);
            System.out.println("\nCurrent Element :" + nNode.getNodeName());
            if ( nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                String charType = eElement.getAttribute("type"); //Tells me the value of characteristic
            }
        }

上面的工作是拉出所有特征 block 并可以得到值。但我不知道如何提取位于每个下面的 parmName 和 parmValud。

有处理这个问题的例子吗?我看这里:http://theopentutorials.com/tutorials/android/xml/android-simple-xml-sax-parser-tutorial/但我不知道如何使用 saxparser 获取这些值。

最佳答案

我使用Android的XmlPullParser .

There are two key methods: next() and nextToken(). While next() provides access to high level parsing events, nextToken() allows access to lower level tokens.

用法示例:

import java.io.IOException;
import java.io.StringReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

public class SimpleXmlPullApp
{
     public static void main (String args[])
         throws XmlPullParserException, IOException
     {
         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) {
          if(eventType == XmlPullParser.START_DOCUMENT) {
              System.out.println("Start document");
          } else if(eventType == XmlPullParser.START_TAG) {
              System.out.println("Start tag "+xpp.getName());
          } 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");
     }
}

关于java - Android Xml解析 "embedded values",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31014495/

相关文章:

java - 如何在另一个servlet中使用其他servlet服务?

java - API 21 new DatePicker Show Week Number 崩溃

java - 如何即时从类定义中删除方法?

android - 如何对齐中心大圆周围的 8 个小圆圈,如附图所示?

java - Java 解析 XML 的问题

java - "Wrong"在 Java 中使用 if 与三元运算符时的返回类型

android - 同步失败错误 :Cause: org/jetbrains/plugins/gradle/tooling/ModelBuilderService

java - "layout"与 Android Studio 中的 "layout resource"相同吗?如何以编程方式创建 XML 布局资源?

ios - 使用 Kanna 解析 HTML

ruby - 使用 Heroku 存储和处理大型 XML 文件?