gpt4 book ai didi

java - 我的 XPath 表达式没有选择 Java 中的任何内容

转载 作者:行者123 更新时间:2023-12-03 16:11:36 24 4
gpt4 key购买 nike

我在 Java 中评估一个 XPath 表达式,它应该只返回一个 String作为返回。
但是,我得到的只是一个空白值。

南昌

import javax.xml.xpath.*;
import java.io.*;
import org.xml.sax.*;

public class XPathBasic{
public static void main(String[] args){
XPathFactory factory;
XPath xPath;
XPathExpression xPathExpressionCompiled;
String xPathExpressionString;
File xmlFile;
InputSource inputSource;

try{
factory = XPathFactory.newInstance();
xPath = factory.newXPath();
xPathExpressionString = "/people/student[@scholarship='yes']/name";
xPathExpressionCompiled = xPath.compile(xPathExpressionString);

xmlFile = new File("helloWorld.xml");
inputSource = new InputSource(new FileInputStream(xmlFile));
String name = xPathExpressionCompiled.evaluate(inputSource);

if(name != null){
System.out.println("Name of the student is: " + name);
}else{
System.out.println("Error");
}
}catch(XPathExpressionException e){
System.out.println("There seems to be an error with your expression: " + e.getMessage());
}catch(IOException e){

}catch(Exception e){

}

}
}

XML
<?xml version="1.0" encoding="UTF-8" ?>
<people xmlns="http://www.cmu.edu/ns/blank"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd">
<student scholarship="yes">
<name>John</name>
<course>Computer Technology</course>
<semester>6</semester>
<scheme>E</scheme>
</student>

<student scholarship="no">
<name>Foo</name>
<course>Industrial Electronics</course>
<semester>6</semester>
<scheme>E</scheme>
</student>
</people>

输出
Name of student is:
我期待看到 约翰 那里。有人可以告诉我出了什么问题吗?

最佳答案

这是我们很多人都会犯的错误!
Xpath 对命名空间很敏感。您的 XML 文件包含命名空间元素,这些命名空间在 XPath 中是必需的。在 XML 文件中,您可以使用默认 namespace ,但不能在 XPath 中使用。

试试

"/people[namespace-uri()='http://www.cmu.edu/ns/blank']/student[namespace-uri()='http://www.cmu.edu/ns/blank' and @scholarship='yes']/name[namespace-uri()='http://www.cmu.edu/ns/blank']"

它应该工作。

您的系统可能允许在 XPath 中使用 namespace 前缀。这些不能为空。一个例子可能是:
"/a:people/a:student[@scholarship='yes']/a:name"

如何映射命名空间前缀 (a) 取决于软件。请注意,只要映射了任何前缀,就可以使用。

关于java - 我的 XPath 表达式没有选择 Java 中的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com