使用 XPath Java 读取标签内部 [英] Read inside a Tag using XPath Java

查看:19
本文介绍了使用 XPath Java 读取标签内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hye 我是使用 Java 读取 XML 文件的新手,我的问题是我一直在尝试读取 xml 以及在特定标记之间我想获取所需的数据我正在使用 XPath,我的查询是:

Hye I am new to read XML File using Java my problem is that I have been trying to read an xml and between a specific tag I want to get the required data I am using XPath and my query is:

   String expression = "/ADOXML/MODELS/MODEL/MODELATTRIBUTES/ATTRIBUTE[@type='STRING']";

它工作正常,我要读取的特定标签是:

It works fine and my specific Tag to read from is:

   <ATTRIBUTE name="Description" type="STRING"> SOME TEXT </ATTRIBUTE>

但我只想读取这些类型的标签中的数据,以便我的输出应该是:

But I want to read the data inside only these types of Tags so that my output should be:

  SOME TEXT

在标签内!有人可以帮助我我该怎么做请我是 xml 阅读的新手!尽我所能:

inside the tag! can somebody help me how can I do this Please I am new to xml reading! Trying my best as:

  String expression = "/ADOXML/MODELS/MODEL/MODELATTRIBUTES/ATTRIBUTE[@name='Description' and ./type/text()='STRING']";

但它不会给我任何输出!提前致谢

But it wont give me any output! thanks in advance

我的代码:

   DocumentBuilderFactory builderFactory =
    DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = null;
try {

builder = builderFactory.newDocumentBuilder();
        org.w3c.dom.Document document = builder.parse(
        new FileInputStream("c:\\y.xml"));

        XPath xPath =  XPathFactory.newInstance().newXPath();

       String expression = "/ADOXML/MODELS/MODEL/MODELATTRIBUTES/ATTRIBUTE[@name='Description'and @type='STRING']";
   System.out.println(expression);
   NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getFirstChild().getNodeValue()); 
}


} catch (ParserConfigurationException | SAXException | IOException e) {
System.out.print(e);
}       

我的代码有问题,无法弄清楚是什么!

There is a problem with my code cant figure out what!

推荐答案

这段代码对我来说很好用,将 XPath 更改为:

This code works fine for me with the changed XPath to:

"/ADOXML/MODELS/MODEL/MODELATTRIBUTES/ATTRIBUTE[@name='Description'][@type='STRING']":

private static final String EXAMPLE_XML =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
        "<ADOXML adoversion=\"Version 5.1\" username=\"kvarga\" database=\"adonisdb\" time=\"08:55\"   date=\"30.11.2013\" version=\"3.1\">" +
            "<MODELS>" +
                "<MODEL version=\"\" applib=\"ADONIS BPMS BP Library 5.1\" libtype=\"bp\" modeltype=\"Business process model\" name=\"Product development\" id=\"mod.25602\">" +
                    "<MODELATTRIBUTES>" +
                        "<ATTRIBUTE name=\"Version number\" type=\"STRING\"> </ATTRIBUTE>" +
                        "<ATTRIBUTE name=\"Author\" type=\"STRING\">kvarga</ATTRIBUTE>" +
                        "<ATTRIBUTE name=\"Description\" type=\"STRING\">I WANT THIS PARA 2</ATTRIBUTE>" +
                    "</MODELATTRIBUTES>" +
                "</MODEL>" +
            "</MODELS>" +
        "</ADOXML>";

public static void main(String[] args) {
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = null;
    try {
        builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse(new ByteArrayInputStream(EXAMPLE_XML.getBytes()));
        XPath xPath =  XPathFactory.newInstance().newXPath();
        String expression = "/ADOXML/MODELS/MODEL/MODELATTRIBUTES/ATTRIBUTE[@name='Description'][@type='STRING']";
        NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
        for (int i = 0; i < nodeList.getLength(); i++) {
            System.out.println("###" + nodeList.item(i).getFirstChild().getNodeValue() + "###");
        }
    } catch (Exception e) {
        System.out.print(e);
    }
}

输出:

###I WANT THIS PARA 2###

这篇关于使用 XPath Java 读取标签内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆