Hi all,

I'd like to extract all META tags into a HTML doc. I think the simpliest 
way is to create a nsIDOMNodeIterator linked to a nsIDOMNodeFilter that 
accepts META elements. I've created a MetaFilter class with the template 
found into $MOZ_OBJDIR/dist/include/dom/nsIDOMNodeFilter.h. But when I 
want to use this filter I do not know how to instantiate it.

I've try to look for the XPathGenerator code that implements a 
nsIDOMNodeFilter but did not find it.

thx for your help.

Olivier

here is the code snippet where I want to use the filter (doc is a 
nsIDOMDocument) :

     nsCOMPtr<MetaFilter> filter = Which code may I put here ?;
     nsCOMPtr<nsIDOMDocumentTraversal> traversal(do_QueryInterface(doc));
     nsCOMPtr<nsIDOMNodeIterator> it = 0;
     nsresult rv;

     rv = traversal->CreateNodeIterator(doc, nsIDOMNodeFilter::SHOW_ALL, 

                             filter, PR_FALSE, getter_AddRefs(it));

here is my MetaFilter class:

class MetaFilter : public nsIDOMNodeFilter
{
public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIDOMNODEFILTER

   MetaFilter();

private:
   ~MetaFilter();

protected:
   /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(MetaFilter, nsIDOMNodeFilter)

MetaFilter::MetaFilter()
{
   /* member initializers and constructor code */
}

MetaFilter::~MetaFilter()
{
   /* destructor code */
}

/* short acceptNode (in nsIDOMNode n); */
NS_IMETHODIMP MetaFilter::AcceptNode(nsIDOMNode *n, PRInt16 *_retval)
{
       PRUint16 nt;
     nsresult rv = n->GetNodeType(&nt);

     *_retval = nsIDOMNodeFilter::FILTER_SKIP;
     if( NS_SUCCEEDED(rv) && nt==nsIDOMNode::ELEMENT_NODE ) {
         nsString name;

         if( NS_FAILED(n->GetNodeValue(name)) ) {
             return NS_ERROR_NOT_AVAILABLE;
         }

         if( name.Equals(NS_LITERAL_STRING("META")) ) {
             *_retval = nsIDOMNodeFilter::FILTER_ACCEPT;
         }
         else if( name.Equals(NS_LITERAL_STRING("BODY")) ) {
             *_retval = nsIDOMNodeFilter::FILTER_REJECT;
         }
     }

     return NS_OK;
}
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to