Не можете вызвать getElementsByTagName для узла в Xerces или Neko? - PullRequest
10 голосов
/ 23 июля 2010

Привет всем, я пытаюсь разобрать дерево DOM, используя Neko / Xerces в Java.

NodeList divs = this.doc.getElementsByTagName("DIV");
for(int i=0; i < divs.getLength(); i++) {
    NodeList images = divs.item(i).parentNode().getElementsByTagName("IMG");
    // operate on these
}

это то, что я в идеале хотел бы сделать. Кажется, я могу только позвонить getElementsByTagName на сам документ? Я делаю что-то неправильно? Должен ли я быть в состоянии вызвать это на элементе Node?

Я могу видеть из документов, что его там нет: http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Node.html так что, может, мне нужно сделать это по-другому?

спасибо!

Ответы [ 2 ]

8 голосов
/ 23 июня 2011

NodeList возвращает только Nodes, а getElementsByTagName доступен только на элементном узле . Поэтому вам необходимо привести ваш Node к элементу, вот пример ниже.

final NodeList images = ((Element)divs.item(i).getParentNode()).getElementsByTagName("IMG");

Однакоосторожно с этим, так как предполагает , что getParentNode () всегда возвращает элемент

Это было бы безопаснее, но гораздо более многословно

final Node n = divs.item(i).getParentNode();

if(n instanceof Element) {
    final Element e = (Element)n;
    e.getElementsByTagName("IMG");
}
0 голосов
/ 23 июля 2010

Да, это странно.Python xml.dom.minidom имеет Node.getElementsByTagName.Может быть, это не является частью стандарта.Вместо этого вы можете выполнить внутренний цикл для divs.item(i).parentNode().getChildNodes().

...