我的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<devices>
<device mobile="true" supported="false">Windows CE</device>
<device mobile="false" minVersion="2">Firefox</device>
<device mobile="false" minVersion="3">Safari</device>
<device mobile="false" minVersion="6">MSIE</device>
<device mobile="false" minVersion="1">Chrome</device>
</devices>
从Java开始,如果我们将输入设为“Firefox”,则输出应为mobile = false和minversion = 2.
如何使用Java从XML获取此数据?
答案 0 :(得分:2)
您可以使用JAXB。首先,你需要从xml的创建者那里获得XSD(甚至是DTD)。然后,您可以使用Java中的xjc之类的工具来创建类(和/或源代码),以便将XML字符串/文件解压缩为Java对象。
完成后,您可以使用Java JAXB类从XML构建Java对象。举个简单的例子:
(MyObject)JAXBContext.newInstance("package.where.xjc.generated.the.classes")
.createUnmarshaller()
.unmarshal(readerOrStreamOrFileOrURL);
查看this了解详情。
答案 1 :(得分:1)
答案 2 :(得分:1)
通常,它始终与解析XML相关联。试试这个:http://www.ibm.com/developerworks/library/x-javaxpathapi.html
使用XPathFactory
即可:
import java.util.*;
import java.lang.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.xpath.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("Devices.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//devices/device[@mobile='false' and @minVersion='2']/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
}
}
输出:
Firefox
答案 3 :(得分:1)
一种简单的方法是使用dom4j,我认为它比SAX简单:http://dom4j.sourceforge.net/,但需要更多内存。
答案 4 :(得分:0)
您需要使用XML解析器。我推荐XOM。它使解析XML文件变得轻而易举。他们也有关于如何实现这一目标的良好文档。
一个例子:
Document doc = new XmlBuilder().build(new File("path/to/file"));
Element devicesElement = doc.getRootElement();
Elements deviceElements = devicesElement.getChildElements();
for (int i = 0; i < deviceElements.size(); i++) {
Element curDevice = deviceElements.get(i);
....
}