使用Java解析XML文件——针对基于Android的应用程序

4

我刚开始学习在Java中解析XML文件。我对如何从属性中解析值以及从标签中解析值有一些想法,但是在我的XML文件中,值存储在不同的位置:

<ul xml:base="http//www.example.com">
    <li>
        <strong>Ram</strong>
        : 45%
    </li>
    <li>
        <strong>CPU</strong>
        : 49%
    </li>
    <li>
        <strong>Undecided</strong>
        : 6%
    </li>
</ul>

这是我的XML格式,在这里我想从XML中解析出百分比值。如果有人知道如何解析这些值,请指导我?
2个回答

3

有几种方法可以实现这个目标。

例如,您可以使用 simplexml 框架。

为此,您可以尝试创建一些类来帮助您解决这个问题。

UL 类:

import java.util.ArrayList;
import java.util.List;

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root(name = "ul", strict = false)
public class ULTag {

   @ElementList(name = "li", inline = true, required = false)
   List<LITag> liTags = new ArrayList<LITag>();

   public List<LITag> getLiTags() {
      return liTags;
   }

   public void setLiTags(List<LITag> liTags) {
      this.liTags = liTags;
   }

   public ULTag() {
   }

}

类名:

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name = "li", strict = false)
public class LITag {

   @Element(name = "strong", required = false)
   private String strong;

   public LITag() {
   }

   public String getStrong() {
      return strong;
   }

   public void setStrong(String strong) {
      this.strong = strong;
   }

}

如果你想在其中插入更多的内容,也可以创建一个强大的类。但是在这里我们不需要它。

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name = "strong", strict = false)
public class StrongTag {

   @Element(name = "strong", required = false)
   private String strong;

   public StrongTag() {
   }

   public String getStrong() {
      return strong;
   }

   public void setStrong(String strong) {
      this.strong = strong;
   }
}

反序列化一个简单的对象

Serializer serializer = new Persister();
File source = new File("yourxmlexampl.xml");

ULTag ulTag = serializer.read(ULTag.class, source);
    做你想做的任何事情。例如:
String percent=ulTag.getLITags().get(0).getStrong();

也许以下内容能够帮助你。欢迎给我写信。 这是关于simplexml框架的链接: http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php


2
在Android中,对于XML解析,你有几个选择,比如DOM解析器、Pull解析器等。更快且推荐使用的是XMLPullParser(参见http://developer.android.com/training/basics/network-ops/xml.html)。我正在使用它,对于大量数据,它比DOM解析器表现得更好。如果你没有大量数据需要解析,可以使用DOM解析器。这是XMLPullParser的文档:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html,这是一个使用它的教程:http://www.vogella.com/articles/AndroidXML/article.html。这里还有一个关于在Android中进行XML解析的通用教程。

http://www.ibm.com/developerworks/opensource/library/x-android/


谢谢Milos,我对JDOM有一些了解。但是我的XML包含像<li> <strong>Ram</strong> : 45% </li>这样的标签。我知道如何从属性和直接标签中解析值,但我对这种标签还不熟悉。你能指导我如何从<strong>和百分比值中解析数值吗?提前致谢。 - RAAAAM
2
要在jdom中获取文本,您可以使用Element.getText()方法。 - user802421
正如@user802421所说,您可以使用getText()方法。对于XMLPullParser也是一样的。一旦获取到元素,您可以使用getText()方法提取其值(标签内部)。 - Milos Cuculovic
如果您正在使用DOM,那么Simple XML可能会很有趣。http://simple.sourceforge.net/ - user802421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接