【问题标题】:How to get attribute value using XPath in Java?如何在 Java 中使用 XPath 获取属性值?
【发布时间】:2014-08-12 08:43:29
【问题描述】:

我使用 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>

我想根据我传递的 ID 从 xml 文档中获取“名称”,但我无法获取所需的数据,而是查询返回空白。

XPathExpression expr = xpath.compile("/schema/element[@id='name_id_2']/name/text()");

【问题讨论】:

  • 您使用的是 XPath,而不是 XQuery。 Java 不支持开箱即用的 XQuery。

标签: java xml xpath


【解决方案1】:

像这样:

XPathExpression expr = xpath.compile("/schema/element[@id='name_id_2']/@name");

您的表达式尝试选择name 元素内的文本,而不是name 属性的值。

【讨论】:

  • 感谢以下表达式解决了上述问题
【解决方案2】:
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>

【讨论】:

  • 代替 XPathConstants.NODE,尝试使用 XPathConstants.NODESET Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList 节点 = (NodeList) 结果; for (int i = 0; i howtodoinjava.com/xml/java-xpath-tutorial-example
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 2017-02-14
  • 2021-11-08
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2011-11-20
相关资源
最近更新 更多