【问题标题】:Get the attributes of a particular tag from the XML file从 XML 文件中获取特定标签的属性
【发布时间】:2013-07-10 02:45:17
【问题描述】:

我正在尝试解析 XML 文件以获取特定标签的属性。下面是我的 XML 文件-

<?xml version="1.0" encoding="UTF-8"?>
<app hash='nv' name='Tech' package='1.0' version='13' filesize='200' create_date='01-03-1987' upate_date='07-09-2013' >
    <url>
        <name>RJ</name>
        <score>10</score>
    </url>
    <url>
        <name>ABC</name>
        <score>20</score>
    </url>
</app>

我正在尝试从上述 XML 文件中获取哈希、名称、包、版本、文件大小、create_date、update_date 值。

下面是我试图解析上述 XML 文件的代码,但我不确定如何从 app 标记中获取上述所需属性?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

    InputStream is = request.getInputStream();
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    doc.getDocumentElement().normalize();

    System.out.println("root of xml file" + doc.getDocumentElement().getNodeName());

    //get hash, name, package value from the app tag in the XML file

    } catch (Exception e) {
      System.out.println(e);
    }

谁能帮我解决这个问题?

【问题讨论】:

  • 您的问题表明您尚未查看有关该主题的教程,因为您没有显示任何尝试从 xml 中提取信息的代码。如果这是我,我会从那里开始。在来这里之前先了解一下这个主题的一些基本知识,因为至少它会帮助你提出更好的问题。顺便说一句,你不应该有一个空的 catch 块,因为那样会导致疯狂。
  • 我已经看过教程,但不知何故我无法理解如何获得这些。而且我也找不到任何类似的教程来帮助我相应地理解。
  • 从您之前的问题看来,您刚刚开始使用 xml。你需要先投入一些研究。真的。没有捷径,尤其是 stackoverflow 不会替代它。
  • 快速找到Google this 和 this

标签: java xml dom xml-parsing


【解决方案1】:

您可以使用Jsoup,它是一个很棒的 Java 库,可用于处理任何基于 XML 的文档。

在您的情况下,您可以使用“app”标签获取标签并解析其属性,如下所示:

String result = getStringFromInputStream(is);

Document doc = Jsoup.parse(result, "", Parser.xmlParser());
Element e = doc.getElementsByTag("app").first();

System.out.println(e.attr("hash"));
System.out.println(e.attr("name"));

//etc...

为了将您的 InputStream 转换为字符串,您可以使用MyKong's method:

private static String getStringFromInputStream(InputStream is) {

    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();

    String line;
    try {

        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return sb.toString();

}

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多