java - Java DOM:getElementsByTagName 不返回任何元素?
问题描述
我正在尝试在http://web.mta.info/status/ServiceStatusSubway.xmlPtSituationElement
解析 XML 文档,并使用以下代码提取所有元素:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document subwayStatusDoc = builder.parse(new URL("http://web.mta.info/status/ServiceStatusSubway.xml").openStream());
NodeList situationList = subwayStatusDoc.getDocumentElement().getElementsByTagName("PtSituationElement");
System.out.println(situationList.item(0)); //prints null
我在这里做错了什么?
解决方案
PtSituationElement 标签包含子标签,因此您需要进入这些标签。仅打印 .item(0) 依赖于 toString() 方法,显然它并不能很好地解释您的节点。
所以添加这个来查看子节点中的一些数据:
Node item = situationList.item(0);
NodeList childNodes = item.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
System.out.println(childNodes.item(j).getTextContent());
}
(我不确定您要如何处理 xml 结构中的数据,但此示例显示了如何继续您的工作。)
此外,我注意到 LongDescription 标记包含不正确的 XML 的 HTML(<br clear=left>
应该是<br clear=left>
等)。解析器可能会遇到问题。如果 HTML 被转义会更好(请参阅如何在 XML 中转义“&”?)。
推荐阅读
- c# - 来自 PSObject C# 的数据
- awesome-wm - 连接新屏幕时强制 Awesome 重启
- python - Python - 使用带线程的 args 从函数调用变量
- r - R中data.frame的嵌套采样
- controller - 将 GPIO 按钮 (RaspberryPi) 映射到游戏手柄 (Gamepad API) 的方法
- ios - 带视频播放的 admob 插页式广告 iOS
- python - 在 R 中解压缩 gz 文件,并进行逐位操作
- c++ - 如何修复已在 AVL.obj 中定义的错误 LNK2005 struct node * root" (?root@@3PAUnode@@A)?
- gpu - 使用 GPU 对具有 128 个颜色通道的图像进行光栅化
- c# - 是否可以使用 IsGrouped=true 和 C# 中的 CollectionView.GroupHeaderTemplate 在 CollectionView 中获取所选项目的组键