Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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和Xpath获取xml的所有属性_Java_Xml_Xslt_Xpath - Fatal编程技术网

使用java和Xpath获取xml的所有属性

使用java和Xpath获取xml的所有属性,java,xml,xslt,xpath,Java,Xml,Xslt,Xpath,我有以下xml: <?xml version="1.0" encoding="UTF-8"?> <root xmlns="http://www.test.com/rest/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <child test="folder" id="2019-05-15-04.52.05.641880A01" /> <child test="folder" id="2019

我有以下xml:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://www.test.com/rest/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <child test="folder" id="2019-05-15-04.52.05.641880A01" />
   <child test="folder" id="2019-05-15-04.52.05.901880A02" />
</root>
我使用以下Xpath和输入xml调用了上述方法:

*[local-name()='root']/*[local-name()='child']/@id

但是我只得到一个
id
,而不是所有的id。知道如何获取所有id吗?

我认为您的Xpath是正确的。您可以使用以下测试类来验证它

package com.idsk.commons.xsl;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Test {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("D://NewFile.xml");

        // Create XPath
        XPathFactory xpathfactory = XPathFactory.newInstance();
        XPath xpath = xpathfactory.newXPath();

        XPathExpression expr = xpath.compile("*[local-name()='root']/*[local-name()='child']/@id"); 

        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;

        List<String> ids = new ArrayList<>();
        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println(nodes.item(i).getNodeValue());
            ids.add(nodes.item(i).getNodeValue()); //store them into List
        }
    }
}
package com.idsk.commons.xsl;
导入java.io.IOException;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公开课考试{
公共静态void main(字符串[]args)抛出ParserConfiguration异常、SAXException、IOException、XPathExpressionException{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);//永远不要忘记这一点!
DocumentBuilder=factory.newDocumentBuilder();
documentdoc=builder.parse(“D://NewFile.xml”);
//创建XPath
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xpathfactory.newXPath();
XPathExpression expr=xpath.compile(“*[local-name()='root']/*[local-name()='child']/@id”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
列表ID=新的ArrayList();
对于(int i=0;i
它将创建以下输出:

2019-05-15-04.52.05.641880A01

2019-05-15-04.52.05.901880A02


我认为你的Xpath是对的。您可以使用以下测试类来验证它

package com.idsk.commons.xsl;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Test {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("D://NewFile.xml");

        // Create XPath
        XPathFactory xpathfactory = XPathFactory.newInstance();
        XPath xpath = xpathfactory.newXPath();

        XPathExpression expr = xpath.compile("*[local-name()='root']/*[local-name()='child']/@id"); 

        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;

        List<String> ids = new ArrayList<>();
        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println(nodes.item(i).getNodeValue());
            ids.add(nodes.item(i).getNodeValue()); //store them into List
        }
    }
}
package com.idsk.commons.xsl;
导入java.io.IOException;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公开课考试{
公共静态void main(字符串[]args)抛出ParserConfiguration异常、SAXException、IOException、XPathExpressionException{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);//永远不要忘记这一点!
DocumentBuilder=factory.newDocumentBuilder();
documentdoc=builder.parse(“D://NewFile.xml”);
//创建XPath
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xpathfactory.newXPath();
XPathExpression expr=xpath.compile(“*[local-name()='root']/*[local-name()='child']/@id”);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
列表ID=新的ArrayList();
对于(int i=0;i
它将创建以下输出:

2019-05-15-04.52.05.641880A01

2019-05-15-04.52.05.901880A02


Java内置的DOM和XPath库非常糟糕。您需要执行
xpath.evaluate(表达式、文档、XPathConstants.NODESET)
@kumesana,您能告诉我上面xml的确切表达式吗,这样我就可以处理这些问题了?Java内置的DOM和xpath库太糟糕了。您需要执行
xpath.evaluate(表达式、文档、XPathConstants.NODESET)
@kumesana,您能告诉我上面xml的确切表达式吗,这样我就可以处理这些问题了?