11

こんにちは、Java で Neko/Xerces を使用して DOM ツリーを解析しようとしています。

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だから、別の方法でやる必要があるかもしれませんか?

ありがとう!

4

2 に答える 2

9

NodeList は Node のみを返し、getElementsByTagName はElement ノードでのみ使用できます。したがって、Node を要素にキャストする必要があります。以下に例を示します。

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

ただし、getParentNode() が常に Element を返すと想定しているため、これには注意してください。

これはより安全ですが、はるかに冗長です

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

if(n instanceof Element) {
    final Element e = (Element)n;
    e.getElementsByTagName("IMG");
}
于 2011-06-23T14:04:24.003 に答える
0

ええ、それは奇妙です。Python の xml.dom.minidom には Node.getElementsByTagName があります。多分それは標準の一部ではありません。代わりに、 の内部ループを繰り返すことができますdivs.item(i).parentNode().getChildNodes()

于 2010-07-23T03:40:00.097 に答える