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