Как получить ElementById с помощью DOM? - PullRequest
6 голосов
/ 17 января 2012

У меня есть часть HTML-страницы, приведенной ниже, и я хочу извлечь содержимое тега div, его идентификатор hiddenDivHL с использованием DOM Parser:

Часть HTML-страницы:

<div id='hiddenDivHL' style='display:none'>http://74.127.61.106/udayavaniIpad/details.php?home=0&catid=882&newsid=123069[InnerSep]http://www.udayavani.com/udayavani_cms/gall_content/2012/1/2012_1$thumbimg117_Jan_2012_000221787.jpg[InnerSep]ಯುವಜನತೆಯಿಂದ ಭವ್ಯಭಾರತ[OuterSep]

Пока я использовал приведенный ниже код, но я не могу использовать getElementById. Как это сделать?

DOM Parser:

    try {

        URL url = new URL("http://74.127.61.106/udayavaniIpad/details_android.php?home=1&catid=882&newsid=27593");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(url.openStream()));
        doc.getDocumentElement().normalize();

        NodeList nodeList = doc.getElementsByTagName("item");

        /** Assign textview array lenght by arraylist size */
        name = new TextView[nodeList.getLength()];
        website = new TextView[nodeList.getLength()];
        category = new TextView[nodeList.getLength()];

        for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            name[i] = new TextView(this);

            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("hiddenDivHL");
            Element nameElement = (Element) nameList.item(0);
            nameList = nameElement.getChildNodes();
            name[i].setText("Name = "
                    + ((Node) nameList.item(0)).getNodeValue());


            layout.addView(name[i]);



        }
    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }

    /** Set the layout view to display */
    setContentView(layout);

}

Ответы [ 7 ]

2 голосов
/ 19 января 2012

XPath - ИМХО самый распространенный и простой способ навигации по DOM в Java.

try{
    URL url = new URL("http://74.127.61.106/udayavaniIpad/details_android.php?home=1&   catid=882&newsid=27593");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(new InputSource(url.openStream()));
    doc.getDocumentElement().normalize();

    XPath xpath = XPathFactory.newInstance().newXPath();
    String expression = "/item/div[@id='hiddenDivHL']";
    Node node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);  

} catch (Exception e) {
    System.out.println("XML Pasing Excpetion = " + e);
}

Я не уверен, что выражение XPath верно, но ссылка здесь: http://developer.android.com/reference/javax/xml/xpath/package-summary.html

1 голос
/ 01 февраля 2012

Существует 2 различия между getElementById и getElementsByName:

  1. getElementById требует одного уникального идентификатора в вашем документе, тогда как getElementsByName может извлечь несколько вхождений с тем же именем.
  2. getElementById - это метод (или функция) объекта документа. Вы можете получить к нему доступ только с помощью document.getElementById (..).

Ваш код, кажется, нарушает оба эти требования, вы, кажется, проходите цикл узлов и ожидаете идентификатор hiddenDivHL в каждом списке узлов. Таким образом, идентификатор не уникален. Во-вторых, ваша корневая точка - это не документ, а корневая точка каждого узла в этом списке.

Если вы знаете, что у вас есть один экземпляр с этим идентификатором, попробуйте document.getElementById.

0 голосов
/ 31 октября 2013

Почему вы не можете использовать getElementById ()?Он находится в JavaSE 7 и JavaSE6 / 5 / 1.4.2, начиная с 'DOM Level 2'.

0 голосов
/ 26 января 2012

Самый простой способ, который я могу придумать, - это использовать библиотеку jSoup , которая выполняет для вас анализ DOM и позволяет выбирать элементы с помощью селектора в стиле css (или в стиле jquery).

в этом примере вы бы сделали что-то вроде этого

Document doc = Jsoup.connect("http://74.127.61.106/udayavaniIpad/details_android.php?home=1&catid=882&newsid=27593").get();
String divContents = doc.select("#hiddenDivHL").first().text();
0 голосов
/ 25 января 2012

Вы должны позвонить fstElmnt.getElementsByTagName("div");, чтобы получить все элементы div и проверить, равен ли их атрибут атрибуту hiddenDivHL.

0 голосов
/ 17 января 2012

Чтобы получить содержимое элемента в JavaScript:

var el = document.getElementById('hiddenDivHL');
var contents = el.innerHTML;
alert("Found " + contents.length + " characters of content.");

См. ваш пример на jsfiddle .

Я думаю, что путаница связана с тем, что ваш вопрос помечен тегом JavaScript, но вы разместили код на Java. Это разные языки, и JavaScript будет смущен только этим анализатором. Я не пользовался Java годами, поэтому не могу вам помочь.

0 голосов
/ 17 января 2012

Я не совсем понял вопрос.

a) Вы имеете в виду получение большего количества элементов с помощью document.getElementById ('hiddenDivHL')?

  • , поэтому мой ответ будет таким, что в HTML-документе идентификатор долженбыть зарезервирован только для одного элемента.

b) Если вы просто хотите поймать этот элемент?

  • что именно не работает?что ты пытаешься достичь?Боюсь, что я не совсем понимаю.
...