2010-07-22 9 views
8

안녕하세요, Java에서 Neko/Xerces를 사용하여 DOM 트리를 구문 분석하려고합니다.Xerces 또는 Neko의 노드에서 getElementsByTagName을 호출 할 수 없습니까?

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 어쩌면 다른 방법으로해야합니까?

감사합니다.

답변

0

예, 이상합니다. Python의 xml.dom.minidom에는 Node.getElementsByTagName이 있습니다. 아마 그것은 표준의 일부가 아닙니다. 대신 내부 루프를 divs.item(i).parentNode().getChildNodes() 이상으로 반복 할 수 있습니다.

6

노드 목록 만 노드를 반환하고 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"); 
}