如何在Java中使用XPath获取属性值?

如何在Java中使用XPath获取属性值?,java,xml,xpath,Java,Xml,Xpath,我需要使用XPath解析以下XML: <?xml version="1.0" encoding="UTF-8"?> <schema> <element name="name_ele1" id="name_id_1" >test name1</element> <element name="name_ele2" id="name_id_2" >test name2</element> <element nam

我需要使用XPath解析以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<schema>
  <element name="name_ele1" id="name_id_1" >test name1</element>
  <element name="name_ele2" id="name_id_2" >test name2</element>
  <element name="name_ele2" id="name_id_3" >test name3</element>
</schema>
像这样:

XPathExpression expr = xpath.compile("/schema/element[@id='name_id_2']/@name");
表达式尝试选择
name
元素中的文本,而不是
name
属性的值

import java.io.File;
import java.io.FileInputStream;
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.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

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

public class XMLXpathReadder {

    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {



         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document document = db.parse(new FileInputStream(new File("C:\\Test.xml")));// same xml comments as above.

            XPathFactory xpf = XPathFactory.newInstance();
            XPath xpath = xpf.newXPath();
            Element userElement = (Element) xpath.evaluate("/schema/element", document,
                XPathConstants.NODE);
            System.out.println(userElement.getAttribute("id"));
            System.out.println(userElement.getAttribute("name"));

    }

}
以上代码为我工作

但是如何读取所有元素的值。 我总是只得到第一个元素节点

<?xml version="1.0" encoding="UTF-8"?>
<schema>
  <element name="name_ele1" id="_1" >test name1</element>
  <element name="name_ele2" id="_2" >test name2</element>
  <element name="name_ele2" id="_3" >test name3</element>
</schema>

测试名称1
测试名称2
测试名称3

谢谢以下表达式解决了上述问题您使用的是XPath,而不是XQuery。Java不支持开箱即用的XQuery。请尝试使用XPathConstants.NODESET对象结果=expr.evaluate(doc,XPathConstants.NODESET),而不是XPathConstants.NODE;节点列表节点=(节点列表)结果;对于(inti=0;i<?xml version="1.0" encoding="UTF-8"?> <schema> <element name="name_ele1" id="_1" >test name1</element> <element name="name_ele2" id="_2" >test name2</element> <element name="name_ele2" id="_3" >test name3</element> </schema>