简体   繁体   中英

Couldn't able to read the attribute using DOM parser

i am having issues when reading the attribute of a link,

this is the structure of my xml,

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

i managed to read the date and title correctly but the href attribute of the link is not working.

Here is my code,

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"));

             }
            }

I am creating a new nodelist for the attributes of link but the code is not working.

error:

java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl cannot be cast to org.w3c.dom.Element
    at Demo.main(Demo.java:45)

A NodeList is not an Element and cannot be cast to one (successfully), so this code isn't going to work:

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

A NodeList is, as the name suggests, a list of nodes (and in your case, the nodes will be Element s). So this code would work for the first link :

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

...whereupon your getAttribute should work fine, as Element has getAttribute .


Side note: If your library has support for newer query functions, you could also do this:

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

...because querySelector returns just the first match (not a list) (or null if no matches; if that's a possibility, add a guard to the above). But I don't know how well querySelector is supported outside of browsers yet.

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

NodeList will give you Node object not Element , you can get href value as follows,

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM