目录
问题内容
解决方法
首页 Java 在 Java 中使用 DOM 从 XML 文档获取数据

在 Java 中使用 DOM 从 XML 文档获取数据

Feb 22, 2024 pm 01:01 PM

php小编草莓带您了解如何在Java中使用DOM从XML文档获取数据。DOM(文档对象模型)是一种处理XML文档的标准方式,通过操作XML树结构,我们可以轻松获取节点、元素和属性等信息。在Java中,我们可以利用DOM解析器来读取XML文档并提取所需数据。接着,我们可以遍历XML文档的节点,从中提取出我们需要的数据,实现灵活高效的数据获取操作。

问题内容

我正在尝试使用 dom 解析 xml 文件,但最后仅输出最后一个条目多次(在循环中)。请告诉我,有什么问题吗? (我是java初学者)

xml 大约包含以下内容:

<channel>
    <title>www.google.com</title>
    <item>
        <title>www.youtube.com</title>
    </item>
    <item>
        <title>play.google.com</title>
    </item>
    ...
</channel>
登录后复制

java 代码:

Node item = null;
    NodeList channelList = document.getElementsByTagName("channel");
    for (int i = 0; i < channelList.getLength(); i++){

        if (channelList.item(i).getNodeType() == Node.ELEMENT_NODE){
            
            NodeList channelListChild = channelList.item(i).getChildNodes();
            for (int j = 0; j < channelListChild.getLength(); j++){
                if (channelListChild.item(j).getNodeType() == Node.ELEMENT_NODE){

                    switch (channelListChild.item(j).getNodeName()){
                        case "title":{
                            String title = channelListChild.item(j).getTextContent();
                            System.out.println(title);
                            break;
                        }
                        case "item":{
                            item = channelListChild.item(j);
                            break;
                        }
                    }
                }
            }
        }
    }
    if (item == null){
        return;
    }

    String title = null;
    NodeList itemList = item.getChildNodes();

    for (int i = 0; i < itemList.getLength(); i++){
        if (itemList.item(i).getNodeType() == Node.ELEMENT_NODE){

            switch (itemList.item(i).getNodeName()){
                case "title":{
                    title = itemList.item(i).getTextContent();
                    break;
                }
            }
        }
        System.out.println(title);
    }
登录后复制

解决方法

您在循环中依次将变量“item”分配给每个项目,因此退出时其值是遇到的最后一个 item 元素。

您并不是唯一一个在此类应用程序中使用 java 和 dom 的人;这是一个流行的组合。但它已经接近25岁了,还有很多更好的选择可供选择。即使必须是 java,也有其他 api,例如 jdom2 和 xom,使用起来更加友好。

saxon 的树导航 api(受到 c# 世界中的 linq 的启发)看起来像这样:

XdmNode channel = document.getOutermostElement();
String title = channel.select(child("title")).asString();
System.out.println(title);
channel.select(child("item")).forEach(item -> {
   String subtitle = item.select("title").asString();
   System.out.println(subtitle);
}
登录后复制

这是等效 dom 代码长度的一小部分。

[免责声明:saxon是我公司的产品]

以上是在 Java 中使用 DOM 从 XML 文档获取数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)