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中文网其他相关文章!