Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Getting a list of Nodes by tag name, starting at a particular Node in the tree...

Posted on 2006-11-14
7
Medium Priority
?
280 Views
Last Modified: 2008-02-01
I'm new to XML. I want to get a list of Nodes by tag name, but starting at some node/depth in the tree - not starting at the top level.

For example, if I have the following simple XML file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<store>
     <item iName="widget1">
          <title> Widget One </title>
          <baseprice> 35.00 </baseprice>
          <repeat> x1 </repeat>
          <repeat> x2 </repeat>
          <repeat> x3 </repeat>
          <more> etc </more>
     </item>

     <item iName="widget2">
          <title> Widget Two </title>
          <baseprice> 1500.00 </baseprice>
          <repeat> y1 </repeat>
          <repeat> y2 </repeat>
          <repeat> y3 </repeat>
          <more> data </more>
     </item>

     <item iName="widget3">
          <title> Widget Three </title>
          <baseprice> 300.00 </baseprice>
     </item>
</store>

and some javascript:

var widget2 = xmlDoc.getElementsByTagName("item")[1];

Can I do something like widget2.getElementsByTagName("repeat") in order to get a list of all the repeat tags within the widget2 tag? In the docs, I don't see any "getElementsByTagName" or similar function in the Node class. Does it only exist at the top level? How do I get a list of tags starting at a particular Node in the tree?
0
Comment
Question by:Melvinivitch
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
7 Comments
 
LVL 15

Expert Comment

by:ozymandias
ID: 17937175
xmlDoc.SelectNodes("store/item[@iName = 'widget2']/repeat");

This will return an XmlNodeList with all of the repeat nodes under the item with the iName of widget2.
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 17937238
Hi Melvinivitch,

Here is what you could do

First you can use SelectNodes to address the node you want to select with XPath
That is a lot more straightforward then using getElementsByTagName.
If you are sure you only want one node instead of a nodelist,
you can use selectSingleNode

You can learn about XPath here
http://www.w3schools.com/xpath/default.asp

var itemNode=oXML.selectNodes("/store/item[@iName = 'widget2']/repeat");

After that you can loop over the nodes like this

                         for (j=0; j<itemNode.length; j++)
                              {
                                  test = test + (itemNode[j].nodeName);
                                  test = test + ("=");
                                  test = test + (itemNode.childNodes[0].nodeValue);
                                  test = test + ("<br />");
                              }          

In this example I write the repeat values in a test string, of course you can use them in your response
The result will be like this
        repeat = y1
        repeat = y2
        repeat = y3            

Cheers!

Geert
0
 

Author Comment

by:Melvinivitch
ID: 17937371
Thanks...

When I use that code: var itemNode=oXML.selectNodes("/store/item[@iName = 'widget2']/repeat");
where oXML is my toplevel xmlDoc object,
and then do: itemNode.childNodes[0].nodeName;
IE gives me this message: "childNodes.0 is null or not an object" ...

Thanks again...
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 15

Expert Comment

by:ozymandias
ID: 17937514
I am guessing that this :

 test = test + (itemNode.childNodes[0].nodeValue);

should be :

 test = test + (itemNode.childNodes[j].nodeValue);
0
 
LVL 60

Accepted Solution

by:
Geert Bormans earned 1300 total points
ID: 17937538
no,
should be test = test + (itemNode[j].childNodes[0].nodeValue);

itemNode[j] is the jth <repeat> element (the jth element in your nodelist)

remeber from one of your previous questions:
childNodes[0].nodeValue is there to get at the text value

you are right, there was a bug in my code, but at a different locaton than you thought

To allign with your question
var itemNode=oXML.selectNodes("/store/item[@iName = 'widget2']/repeat");
should be
var itemNode=xmlDoc.selectNodes("/store/item[@iName = 'widget2']/repeat");

cheers

Geert


0
 

Author Comment

by:Melvinivitch
ID: 17940441
Thanks again.
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 17940532
welcome
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Create a Windows 10 custom Image with custom task bar and custom start menu using XML for deployment.
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question