JAVA : Parsing the Xml Value using javax. ml 和 Xpath 选项

标签 java xml-parsing

我有一个 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/

相关文章:

java - 使用 Collectors.averagingInt java 从列表中获取平均数据

java - spring-data @Query 映射结果问题

java - 我的循环不循环

python - 即使在 pretty_print=True 时,使用 lxml 编写也不会发出空格

c# - 需要从 XML 中获取值

java - 如何使用 XML 和 Java 检索基于给定父标签的所有子标签?

java - 无法启动 Activity ComponentInfo android.view.InflateException : Binary XML file line #31

xml - 为什么这个 raptor 代码解析 NTriples 而不是 RDFXML?

java - 从 xml 字符串中删除相同标签的最佳方法是什么?

java - Log4j、日志记录、Eclipse