无法使用DOM解析器读取属性

时间:2015-01-05 12:52:29

标签: java

我在阅读链接属性时遇到问题

这是我的xml的结构,

    <entry>
        <updated>
        <title>
        <link href="">
    </entry>

我设法正确阅读了日期和标题,但href的{​​{1}}属性无效。

这是我的代码,

link

我正在为链接的属性创建一个新的节点列表,但代码无效。

错误:

NodeList nList = doc.getElementsByTagName("entry");
            System.out.println("============================");

            for (int temp = 0; temp < nList.getLength(); temp++)
            {
             Node node = nList.item(temp);
             System.out.println("");    //Just a separator
             if (node.getNodeType() == Node.ELEMENT_NODE)
             {
                Element eElement = (Element) node;
                System.out.println("Date : "  + eElement.getElementsByTagName("updated").item(0).getTextContent());
                System.out.println("Title : "    + eElement.getElementsByTagName("title").item(0).getTextContent());

                // The below code is for reading href attribute of link,
                NodeList node1 = eElement.getElementsByTagName("link");
                Element eElement1 = (Element) node1;
                System.out.println(eElement1.getAttribute("href"));

             }
            }

2 个答案:

答案 0 :(得分:2)

NodeList不是Element,也不能投放到一个(成功),因此此代码无法正常工作:

NodeList node1 = eElement.getElementsByTagName("link");
Element eElement1 = (Element) node1;

顾名思义,NodeList列表的节点(在您的情况下,节点将是Element s)。因此,此代码适用于第一个link

NodeList list = eElement.getElementsByTagName("link");
Element eElement1 = (Element) list.item(0);

...因此getAttribute应该可以正常工作,因为ElementgetAttribute


附注:如果您的库支持更新的查询功能,您也可以这样做:

String href = ((Element)eElement.querySelector("entry")).getAttribute("href");

...因为querySelector只返回第一个匹配(不是列表)(如果没有匹配则返回null;如果有可能,请在上面添加一个保护)。但我还不知道在浏览器之外支持querySelector的程度如何。

答案 1 :(得分:2)

  // The below code is for reading href attribute of link,
 NodeList node1 = eElement.getElementsByTagName("link");
 Element eElement1 = (Element) node1;

NodeList会为您提供Node对象而不是Element,您可以获得如下的href值,

String hrefValue = nodeList.item(0).
       getAttributes().getNamedItem("href").getNodeValue();