2010-07-22 9 views
8

hi tất cả Tôi đang cố gắng phân tích cú pháp cây DOM bằng cách sử dụng Neko/Xerces trong Java.Không thể gọi getElementsByTagName trên một nút trong Xerces hoặc Neko?

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 
} 

là những gì tôi lý tưởng muốn làm. Có vẻ như tôi chỉ có thể gọi số getElementsByTagName trên chính tài liệu đó? Tôi có làm điều gì sai? Tôi có thể gọi nó trên một yếu tố Node?

Tôi có thể thấy từ các tài liệu không có ở đó: http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Node.html vì vậy có lẽ tôi cần phải làm theo cách khác?

cảm ơn!

Trả lời

0

Vâng, thật kỳ lạ. Python xml.dom.minidom có ​​một Node.getElementsByTagName. Có lẽ nó không phải là một phần của tiêu chuẩn. Thay vào đó, bạn có thể lặp lại vòng lặp bên trong qua divs.item(i).parentNode().getChildNodes().

6

Danh sách NodeList chỉ trả về nút và getElementsByTagName chỉ khả dụng trên Element node Do đó, bạn cần truyền nút của mình tới phần tử, dưới đây là ví dụ bên dưới.

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

Tuy nhiên hãy cẩn thận với điều này vì nó giả rằng getParentNode() luôn trả về một phần tử

này sẽ an toàn hơn, nhưng rất nhiều tiết hơn

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

if(n instanceof Element) { 
    final Element e = (Element)n; 
    e.getElementsByTagName("IMG"); 
}