Не можете вызвать getElementsByTagName для узла в Xerces или Neko?
Привет всем Я пытаюсь разобрать дерево 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 ответа
NodeList возвращает только Nodes, а getElementsByTagName доступен только на узле Element. Поэтому вам необходимо привести ваш 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");
}
Да, это странно. Python xml.dom.minidom имеет Node.getElementsByTagName. Может быть, это не является частью стандарта. Вместо этого вы можете повторить внутренний цикл divs.item(i).parentNode().getChildNodes()
,