【问题标题】:How to getElementById using DOM?如何使用 DOM 获取ElementById?
【发布时间】:2012-02-12 05:02:21
【问题描述】:

我有下面给出的 HTML 页面的一部分,并希望使用 DOM Parser 提取 div 标签的内容,其 id 为 hiddenDivHL

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 解析器:

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

}

【问题讨论】:

标签: java android dom getelementbyid


【解决方案1】:

我并没有真正明白这个问题。

a) 你的意思是通过 document.getElementById('hiddenDivHL') 获取更多元素吗?

  • 所以我的回答是,在 HTML 文档中,id 必须只为一个元素保留。

b) 如果你只是想捕捉那个元素?

  • 究竟是什么不起作用?你想达到什么目的?恐怕我真的不明白这一点。

【讨论】:

  • @nabittened-我想获取 'hiddenDivHL' 元素的内容。
  • 应该与document.getElementById('hiddenDivHL') 一起使用元素resp。 document.getElementById('hiddenDivHL').innerHTML
【解决方案2】:

在 JavaScript 中获取元素的内容:

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

your example on jsfiddle

我认为混淆是由于您的问题被标记为 JavaScript,但您发布的代码是 Java。它们是不同的语言,JavaScript 人只会被那个解析器弄糊涂。我已经好几年没用过 Java 了,所以我真的帮不了你。

【讨论】:

  • DOM API 也存在于 Java 中。您可以将 HTML 文件加载到 Java DOM 中。
【解决方案3】:

恕我直言,XPath 是在 Java 中导航 DOM 的最常见和最简单的方法。

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

【讨论】:

    【解决方案4】:

    您必须调用fstElmnt.getElementsByTagName("div"); 来获取所有div 的元素并检查它们的属性id 是否等于hiddenDivHL

    【讨论】:

      【解决方案5】:

      我能想到的最简单的方法是使用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();
      

      【讨论】:

        【解决方案6】:

        getElementById 和 getElementsByName 有两个区别:

        1. getElementById 要求您的文档中有一个唯一的 id,而 getElementsByName 可以获取多次出现的同名。
        2. getElementById 是文档对象的方法(或函数)。您只能使用 document.getElementById(..) 访问它。

        您的代码似乎违反了这两个要求,您似乎经历了一个节点循环并期望每个节点列表中都有一个 hiddenDivHL id。所以id不是唯一的。其次,您的根点不是文档,而是该列表中每个节点的根点。

        如果您知道您有一个具有该 ID 的实例,请尝试 document.getElementById。

        【讨论】:

          【解决方案7】:

          为什么不能使用 getElementById()?它在 JavaSE 7 和 JavaSE6/5/1.4.2 中,因为 'DOM Level 2'。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-06
            • 2019-10-12
            • 1970-01-01
            • 2021-05-11
            • 2017-05-01
            • 1970-01-01
            • 2023-02-24
            • 2011-01-13
            相关资源
            最近更新 更多