Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > Using xPath to Search Entire xml file

Reply
Thread Tools

Using xPath to Search Entire xml file

 
 
ETL
Guest
Posts: n/a
 
      12-29-2004
Hi,
I have an xml document that feeds a treeview menu on my web site. The
structure of the xml file is as follows.

<XML type="text/xml">
<root>
<a0 name="One">
<a0_0 html="Report 1" id="1" />
<a0_1 html="Report 2" id="2" />
<a0_2 html="Report 3" id="3" />
</a0>
<a1 name="Two">
<a1_0 html="Report 1" id="4" />
<a1_1 html="Report 2" id="5" />
<a1_2 html="Report 3" id="6" />
</a1>
<a2 name="Three">
<a2_1 name="Three_One">
<a2_1_1 html="Report 1" id="7" />
<a2_2_2 html="Report 2" id="8" />
</a2_1>
<a2_2 name="Three_Two">
<a2_2_1 html="Email Report 1" id="9" />
<a2_2_2 html="Email Report 2" id="10" />
<a2_2_3 html="Email Report 3" id="11" />
</a2_2>
</a2>
</root>
</XML>

I want to buld an asp.net application that takes in a node id attribute
and returns the html attribute of the desired node. So if 11 were
passed in it would return "Email Report 3".

I've found lots of xPath examples that search a straigh aligned xml
file that doesn't have nested attributes but my file is more complex
and includes tierded menu folders.

How can I search the entire document for the ID attribute.

One other thing, is there a difference in xPath quesries when using
attribute or element based xml? Just curious.
Thanks for your help.

Regards

Eric

 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      12-29-2004


ETL wrote:


> I have an xml document that feeds a treeview menu on my web site. The
> structure of the xml file is as follows.
>
> <XML type="text/xml">
> <root>
> <a0 name="One">
> <a0_0 html="Report 1" id="1" />
> <a0_1 html="Report 2" id="2" />
> <a0_2 html="Report 3" id="3" />
> </a0>
> <a1 name="Two">
> <a1_0 html="Report 1" id="4" />
> <a1_1 html="Report 2" id="5" />
> <a1_2 html="Report 3" id="6" />
> </a1>
> <a2 name="Three">
> <a2_1 name="Three_One">
> <a2_1_1 html="Report 1" id="7" />
> <a2_2_2 html="Report 2" id="8" />
> </a2_1>
> <a2_2 name="Three_Two">
> <a2_2_1 html="Email Report 1" id="9" />
> <a2_2_2 html="Email Report 2" id="10" />
> <a2_2_3 html="Email Report 3" id="11" />
> </a2_2>
> </a2>
> </root>
> </XML>
>
> I want to buld an asp.net application that takes in a node id attribute
> and returns the html attribute of the desired node. So if 11 were
> passed in it would return "Email Report 3".


Having the nesting level encoded in the element name is a pretty odd way
and will cause you a lot of trouble I think.
The XPath could be
//*[@id = '11']/@html

--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
 
 
 
Joris Gillis
Guest
Posts: n/a
 
      12-29-2004
>> I want to buld an asp.net application that takes in a node id attribute
>> and returns the html attribute of the desired node. So if 11 were
>> passed in it would return "Email Report 3".

>
> Having the nesting level encoded in the element name is a pretty odd way
> and will cause you a lot of trouble I think.
> The XPath could be
> //*[@id = '11']/@html
>


Maybe you could use the DOM function 'getElementById' instead of an Xpath expression?


--
Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
Vincit omnia simplicitas
 
Reply With Quote
 
ETL
Guest
Posts: n/a
 
      12-29-2004

Joris Gillis wrote:
> >> I want to buld an asp.net application that takes in a node id

attribute
> >> and returns the html attribute of the desired node. So if 11 were
> >> passed in it would return "Email Report 3".

> >
> > Having the nesting level encoded in the element name is a pretty

odd way
> > and will cause you a lot of trouble I think.
> > The XPath could be
> > //*[@id = '11']/@html
> >

>
> Maybe you could use the DOM function 'getElementById' instead of an

Xpath expression?
>
>
> --
> Joris Gillis

(http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
> Vincit omnia simplicitas


I'm not so sure that the 'getElementById' format works for nested
nodes. All the exmples I found for this used simple one dimensional XML
documents.

 
Reply With Quote
 
ETL
Guest
Posts: n/a
 
      12-29-2004

Joris Gillis wrote:
> >> I want to buld an asp.net application that takes in a node id

attribute
> >> and returns the html attribute of the desired node. So if 11 were
> >> passed in it would return "Email Report 3".

> >
> > Having the nesting level encoded in the element name is a pretty

odd way
> > and will cause you a lot of trouble I think.
> > The XPath could be
> > //*[@id = '11']/@html
> >

>
> Maybe you could use the DOM function 'getElementById' instead of an

Xpath expression?
>
>
> --
> Joris Gillis

(http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
> Vincit omnia simplicitas


I'm not so sure that the 'getElementById' format works for nested
nodes. All the exmples I found for this used simple one dimensional XML
documents.

 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      12-30-2004


Joris Gillis wrote:

>> Having the nesting level encoded in the element name is a pretty odd way
>> and will cause you a lot of trouble I think.
>> The XPath could be
>> //*[@id = '11']/@html
>>

>
> Maybe you could use the DOM function 'getElementById' instead of an
> Xpath expression?


If you want to use getElementById then the document needs a DTD that
defines that the attributes of name id are of type ID. The original
example doesn't have a DTD. And with those element names encoding
nesting levels the DTD would need to be adjusted every time the nesting
level of the XML increases.

--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
Joris Gillis
Guest
Posts: n/a
 
      12-30-2004
> If you want to use getElementById then the document needs a DTD that
> defines that the attributes of name id are of type ID.

I'll try not to make that mistake again...

> The original example doesn't have a DTD. And with those element names
> encoding nesting levels the DTD would need to be adjusted every time the
> nesting level of the XML increases.


Is it really necessary to define the whole DTD? Can one not specify the
attribute that is of type ID without including any other document
definition? (note that I've never used DTD, XML Schema or RelaxNG)

regards,
--
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/
 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      12-30-2004


Joris Gillis wrote:

> Is it really necessary to define the whole DTD? Can one not specify the
> attribute that is of type ID without including any other document
> definition?


With a DTD you need to define the attribute for each element you want to
use it on.
I am not sure what is supposed to happen if you do not define the
elements but then specify attributes but it is certainly not reliable
thing to do.
In my tests here with MSXML 3 and with .NET XmlDocument elements are not
found by id (using the nodeFromID function in MSXML and GetElementById
with .NET) if only attributes are defined.
Mozilla with getElementById finds the elements if only the attributes
are defined. But Mozilla only processes internal subsets of DTDs so in
many cases you can't rely on ID attributes and getElementById.


There is a new W3C recommendation for the xml:id attribute
<http://www.w3.org/TR/xml-id/>
if that is going to be implemented then no DTD should be required to
make use of getElementById.


--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
Joris Gillis
Guest
Posts: n/a
 
      12-30-2004
> There is a new W3C recommendation for the xml:id attribute
> <http://www.w3.org/TR/xml-id/>
> if that is going to be implemented then no DTD should be required to
> make use of getElementById.


That sounds really interesting. I hope it will soon become a recommendation...

--
Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
"Scio me nihil scire" - Socrates
 
Reply With Quote
 
ETL
Guest
Posts: n/a
 
      12-30-2004

Joris Gillis wrote:
> > There is a new W3C recommendation for the xml:id attribute
> > <http://www.w3.org/TR/xml-id/>
> > if that is going to be implemented then no DTD should be required

to
> > make use of getElementById.

>
> That sounds really interesting. I hope it will soon become a

recommendation...
>
> --
> Joris Gillis

(http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
> "Scio me nihil scire" - Socrates


lame....it's looking like GetElementByID is going to be too much
overhead for this application. I don't want to have to maintain a DTD
for this. Back to xPath solution I guess.....

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
delete xml elements - using xpath search Tharanga Abeyseela Python 0 10-16-2012 03:57 AM
Beginning .Net : Select entire month or entire week using selectionmode in calendar control with C# Examples and VB.Net Examples jayeshsorathia@gmail.com ASP .Net 0 09-26-2012 07:17 AM
Search for string, then extract entire XML element where it appears. How? mandibdc@gmail.com XML 6 07-03-2006 01:54 AM
XML Search/Replace entire node? DarthDaddy@gmail.com XML 5 05-10-2006 02:36 PM
"Memory leak" in javax.xml.xpath.XPath Marvin_123456 Java 4 07-29-2005 03:49 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57