Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java从XML文件提取数据?_Java_Xml - Fatal编程技术网

如何使用Java从XML文件提取数据?

如何使用Java从XML文件提取数据?,java,xml,Java,Xml,我的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="

我的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>

Windows CE
火狐
游猎
MSIE
铬
在Java中,如果输入为“Firefox”,则输出应该是mobile=false和minversion=2

如何使用Java从XML中获取这些数据?


查看示例。

一般来说,它总是与解析XML联系在一起。试试这个:

使用
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());
    } 


    }
}

一种简单的方法是使用dom4j,我认为它比SAX更简单,但需要更多内存。

您可以使用。首先,您需要从xml的创建者那里获取XSD(甚至DTD)。然后,您可以使用类似于fromjava的工具来创建类(和/或源代码),以便将XML字符串/文件解压到Java对象中

完成后,可以使用javajaxb类从XML构建Java对象。举个简单的例子:

(MyObject)JAXBContext.newInstance("package.where.xjc.generated.the.classes")
    .createUnmarshaller()
    .unmarshal(readerOrStreamOrFileOrURL);

查看了解更多信息。

您需要使用XML解析器。我推荐。它使解析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);
    ....
}
Document doc=new XmlBuilder().build(新文件(“path/to/File”));
Element DeviceElement=doc.getRootElement();
Elements deviceElements=DeviceElement.getChildElements();
对于(int i=0;i
您以前尝试过搜索吗?这已经被问了很多次了。在这种特定情况下(您希望从一些较大的XML中提取一些值),我建议您搜索“XPath Java”。+1,您也可以从Java类开始,然后使用JAXB注释将它们映射到所需的XML。DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();domFactory.setNamespaceAware(true);DocumentBuilder=domFactory.newDocumentBuilder();documentdoc=builder.parse(“Device.xml”);XPathFactory=XPathFactory.newInstance();XPath=factory.newXPath();XPathExpression expr=xpath.compile(“//devices/device[@mobile='true'和@minVersion='2']/text()”;Object result=expr.evaluate(doc,XPathConstants.NODESET);节点列表节点=(节点列表)结果;对于(int i=0;iDocument 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); .... }