You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Richard Jinks <cy...@yahoo.co.uk> on 2002/01/09 12:28:03 UTC
NodeIterator problems
Hi
Please can someone tell me whats wrong with the code sample below?
I'm trying to use a NodeIterator to go through all nodes in my DOM tree, but
the code is ignoring Attribute nodes.
I can't find anything in the API or the DOM spec to indicate that
NodeIterators ignore attribute nodes, and I'm not using any filters, or
limiting the whatToShow variable in any way, so as far as I'm aware, I
should be able to see them.
...
DOM_Document doc;
DOM_NodeIterator iter;
DOM_Node nd;
doc=parser->getDocument();
nd=doc.getFirstChild();
iter=doc.createNodeIterator(nd,DOM_NodeFilter::SHOW_ALL,NULL, true);
while ((nd=iter.nextNode()) != 0) {
printf("Xerces iterator: %s\n",nd.getNodeName().transcode());
}
...
As an example, this code produces the following output
XML -
<?xml version="1.0"?>
<el1>
<el2 a="fish"></el2>
<el3 a="fish" b="gold"></el3>
<el2/>
</el1>
Output -
Xerces iterator: "el1"
Xerces iterator: "#text"
Xerces iterator: "el2"
Xerces iterator: "#text"
Xerces iterator: "el3"
Xerces iterator: "#text"
Xerces iterator: "el2"
Xerces iterator: "#text"
If I change the whatToShow to DOM_NodeFilter::SHOW_ATTRIBUTE then nothing is
output.
Thanks for any help,
Richard
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
Re: NodeIterator problems
Posted by Richard Jinks <cy...@yahoo.co.uk>.
Ah. Forgive me replying to my own post -
Just read further into the DOM 2 Traversal spec,
(From section 1.2 Formal Interface Definition)
SHOW_ATTRIBUTE
Show Attr nodes. This is meaningful only when creating an iterator or
tree-walker with an attribute node as its root; in this case, it means that
the attribute node will appear in the first position of the iteration or
traversal. Since attributes are never children of other nodes, they do not
appear when traversing over the document tree.
So, it was my stupid. Looks like I'll have to rewrite the loop for the
iterator to do special things for attributes.
Thanks,
Richard.
----- Original Message -----
From: "Richard Jinks" <cy...@yahoo.co.uk>
To: <xe...@xml.apache.org>
Sent: Wednesday, January 09, 2002 11:28 AM
Subject: NodeIterator problems
> Hi
> Please can someone tell me whats wrong with the code sample below?
> I'm trying to use a NodeIterator to go through all nodes in my DOM tree,
but
> the code is ignoring Attribute nodes.
> I can't find anything in the API or the DOM spec to indicate that
> NodeIterators ignore attribute nodes, and I'm not using any filters, or
> limiting the whatToShow variable in any way, so as far as I'm aware, I
> should be able to see them.
>
> ...
> DOM_Document doc;
> DOM_NodeIterator iter;
> DOM_Node nd;
>
> doc=parser->getDocument();
> nd=doc.getFirstChild();
> iter=doc.createNodeIterator(nd,DOM_NodeFilter::SHOW_ALL,NULL, true);
>
> while ((nd=iter.nextNode()) != 0) {
> printf("Xerces iterator: %s\n",nd.getNodeName().transcode());
> }
> ...
>
> As an example, this code produces the following output
>
> XML -
>
> <?xml version="1.0"?>
> <el1>
> <el2 a="fish"></el2>
> <el3 a="fish" b="gold"></el3>
> <el2/>
> </el1>
>
> Output -
> Xerces iterator: "el1"
> Xerces iterator: "#text"
> Xerces iterator: "el2"
> Xerces iterator: "#text"
> Xerces iterator: "el3"
> Xerces iterator: "#text"
> Xerces iterator: "el2"
> Xerces iterator: "#text"
>
> If I change the whatToShow to DOM_NodeFilter::SHOW_ATTRIBUTE then nothing
is
> output.
>
> Thanks for any help,
> Richard
>
>
>
> _________________________________________________________
> Do You Yahoo!?
> Get your free @yahoo.com address at http://mail.yahoo.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
> For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org