使用java和Xpath获取xml的所有属性
我有以下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 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的确切表达式吗,这样我就可以处理这些问题了?