Find an xml node

  • Thread starter Thread starter Marco Trapanese
  • Start date Start date
M

Marco Trapanese

Hello,

I have a xml file like this:

<book id='1'>
<name></name>
<author></author>
...
</book>

<book id='2'>
...
</book>

<book id='3'>
...
</book>

....


How to find the book with attribute id = '2' without cycle all nodes?

Thanks!
Marco / iw2nzm
 
Hello,

I have a xml file like this:

<book id='1'>
<name></name>
<author></author>
...
</book>

<book id='2'>
...
</book>

<book id='3'>
...
</book>

...


How to find the book with attribute id = '2' without cycle all nodes?

Can't do it, as far I am aware. You will have to restrieve a NodeList
on book, then cycle through the nodes looking for the first one that
has an attribute of id with the value of 2.

Well , technically, you are not cycling thorugh all nodes, since the
one you are looking far, at least in this example, is the second one.
But you will need to first retrieve the entire list of book nodes with
a SelectNodes method invocation.

Besides, by this time you have the entire XML file in memory anyway
from the DOM Load method.
 
Hello,

I have a xml file like this:

<book id='1'>
        <name></name>
        <author></author>
        ...
</book>

<book id='2'>
        ...
</book>

<book id='3'>
        ...
</book>

...

How to find the book with attribute id = '2' without cycle all nodes?

Thanks!
Marco / iw2nzm

It would be possible to find the element using a string search, but it
would be very difficult to find the matching end element without some
serious Regex overhead. Then you would be able to load the string you
found into memory as xml and parse it normally. I seriously doubt this
would give you better performance, and would be a huge pain to
maintenance.

Why exactly are you afraid to loop through the nodes?

Thanks,

Seth Rowe [MVP]
 
If this is a proper XML file it will have a root node these <book> nodes
will be children of. In that case you can use XDocument (VB9 (2008)) and
XLINQ:

Dim myDoc As XDcoument = <books>
<book id='1'>
<name></name>
<author></author>
</book>
<book id='2'>hello
</book>
<book id='3'>
</book>
</books>

Dim item = From x In myDoc.<book> Where x.@id = "2"
 
What a load of rubbish!!!!!!!!!!!

It's as simple as:

_doc.SelectSingleNode("//book[@id='2']")

where _doc is the 'loaded' XmlDocument object.
 
Stephany Young ha scritto:
What a load of rubbish!!!!!!!!!!!

It's as simple as:

_doc.SelectSingleNode("//book[@id='2']")

where _doc is the 'loaded' XmlDocument object.


Yeah, it really works! :)

Thanks!
Marco / iw2nzm
 
Back
Top