首页 > 解决方案 > 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

我在这里做错了什么?

标签: javaxmlparsingdom

解决方案


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 中转义“&”?)。


推荐阅读