java - 使用 Java 在文档中的任何位置定位 XML 元素

标签 java xml xpath

给定以下 XML(示例):

<?xml version="1.0" encoding="UTF-8"?>
<rsb:VersionInfo xmlns:atom="http://www.w3.org/2005/Atom" xmlns:rsb="http://ws.rsb.de/v2">
    <rsb:Variant>Windows</rsb:Variant>
    <rsb:Version>10</rsb:Version>
</rsb:VersionInfo>

我需要获取 VariantVersion 的值。我目前的方法是使用 XPath,因为我不能依赖给定的结构。我所知道的是文档中某处有一个元素 rsb:Version

XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "//Variant";
InputSource inputSource = new InputSource("test.xml");
String result = (String) xpath.evaluate(expression, inputSource, XPathConstants.STRING);
System.out.println(result);

然而,这不会输出任何内容。我尝试了以下 XPath 表达式:

  • //变体
  • //变量/文本()
  • //rsb:变体
  • //rsb:变量/文本()

正确的 XPath 表达式是什么?或者是否有更简单的方法获取此元素?

最佳答案

我建议只遍历文档以找到给定的标签

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

    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
            .newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document document = docBuilder.parse(new File("test.xml"));

    NodeList nodeList = document.getElementsByTagName("rsb:VersionInfo");
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            // do something with the current element
            System.out.println(node.getNodeName());
        }
    }
}

编辑:Yassin 指出它不会获得子节点。这应该会为您指明正确的方向,让您找到 child 。

private static List<Node> getChildren(Node n)
  {
    List<Node> children = asList(n.getChildNodes());
    Iterator<Node> it = children.iterator();
    while (it.hasNext())
      if (it.next().getNodeType() != Node.ELEMENT_NODE)
        it.remove();
    return children;
  }

关于java - 使用 Java 在文档中的任何位置定位 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33401633/

相关文章:

java - org.hibernate.hql.internal.ast.QuerySyntaxException : Hibernate not able to map table name

带有对象的 Javafx 可编辑组合框

xml - 获取 XML 文件中字符串的 XPath

java - 如何打印不同索引长度的二维数组?

java - Netbeans 8.2 错误的编辑器文本

c# - 如何?类对象的 XML 序列化

java - 使用 Spring 从 XML 属性文件加载并注入(inject)属性 Bean

firefox - 使用 Firefox WebDriver 时选择所有具有文本的节点的 Xpath 表达式是什么?

XPath:在特定标签之后和相同的下一个标签之前选择文本

sql - 在部分xpath上的Oracle 10.2.0.4.0查询