我有一个 XmlParserClass 从 xml 文件中获取值,如下所示。
<?xml version="1.0" encoding="utf-8" ?>
<HomePageData>
<LogoTopLeft>//*[@id='corp_logo']</LogoTopLeft>
<SingInLink>//*[@id='login']</SingInLink>
<SingUpLink>//*[@id='signup']</SingUpLink>
</HomePageData>
我的类文件中的方法如下所示:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
XPath xp = XPathFactory.newInstance().newXPath();
try{
String value = xp.evaluate("/LogoTopLeft/text()", doc);
return value;
} catch(XPathExpressionException e)
{
return null;
}
我无法使用此类文件从 xml 文件中获取预期数据。它只是到达 try block ,然后到达 catch 返回“null”。 stackoverflow 中的大多数问题都已通过 for 循环来收集所有节点来回答,但我需要一次获取一个数据,而不是一次性获取所有元素,而且,我需要将此值返回到另一个类文件,该文件只接受STRINGS,所以我无法传递 NodeList 或任何其他元素
P.S - xml 文件存在于解析文件之外的不同位置。我将类路径值“/projName/src/com/core/path/indexPage.xml”存储在文件中并传递它。
最佳答案
您只需要修复您的 XPath。 /LogoTopLeft
正在寻找 XML 根中的元素,而它是一个子元素。因此,可以使用 //LogoTopLeft
或将完整路径指定为 /HomePageData/LogoTopLeft
String logo = xp.evaluate("//LogoTopLeft/text()", doc);
String signIn = xp.evaluate("//SignInLink/text()", doc);
String signUp = xp.evaluate("//SignUpLink/text()", doc);
System.out.println( "logo = " + logo +
"; signIn = " + signIn +
"; signUp = " + signUp);
/* prints:
logo = //*[@id='corp_logo']; signIn = //*[@id='login']; signUp = //*[@id='signup']
*/
编辑:(我的测试代码)
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(new File("input.xml"));
XPath xp = XPathFactory.newInstance().newXPath();
try {
String logo = xp.evaluate("/HomePageData/LogoTopLeft/text()", doc);
String signIn = xp.evaluate("//SignInLink/text()", doc);
String signUp = xp.evaluate("//SignUpLink/text()", doc);
System.out.println( "logo = " + logo +
"; signIn = " + signIn +
"; signUp = " + signUp);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
input.xml(放置在项目目录中)
<?xml version="1.0" encoding="utf-8" ?>
<HomePageData>
<LogoTopLeft>//*[@id='corp_logo']</LogoTopLeft>
<SignInLink>//*[@id='login']</SignInLink>
<SignUpLink>//*[@id='signup']</SignUpLink>
</HomePageData>
关于JAVA : Parsing the Xml Value using javax. ml 和 Xpath 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253675/