Home All Groups Group Topic Archive Search About

Simple xpath question

Author
2 Aug 2006 3:37 PM
Zhiv Kurilka
Dear all,
supposed I have xml file
<a>
<b>
<name>ggg</name>
<c>10</c>
<name>ddd</name>
</b>

<b>
<name>zzz</name>
<c>10</c>
<name>yyyy</name>
</b>
<b>
<name>zzz</name>
<c>12</c>
<name>xxxxx</name>
</b>

</a>
Lets say I need to select all nodes where c=10 and print a path of names
dim my_list as xmlnodelist =myRootNode.SelectNodes("//a/b[c='10']")
Now I need to print a path of nodes name. The result should be:
---------------------
ggg/ddd
zzz/yyy
--------------------
Please help me. How can I do that? I have no idea how to get this info from
my_list

Author
2 Aug 2006 3:43 PM
Zhiv Kurilka
Sorry, error in xml file. Should be:

<root>
<a>
<name>ddd</name>
<b>
<name>ggg</name>
<c>10</c>
</b>
</a>

<a>
<name>yyyy</name>
<b>
<name>zzz</name>
<c>10</c>
</b>
</a>
<a>
<name>zzz</name>
<b>

<c>12</c>
<name>xxxxx</name>
</b>
</a>

</root>
Author
2 Aug 2006 4:03 PM
Marc Gravell
Something like (C# - and I've been lazy using string concatenation):

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        foreach (XmlElement el in doc.SelectNodes("/root/a/b[c='10']"))
        {
            string name = el.SelectSingleNode("name").InnerText, path = "";
            foreach (XmlElement pathEl in
el.SelectNodes("ancestor-or-self::*/name"))
            {
                path += "/" + pathEl.InnerText;
            }
            Debug.WriteLine(name + ": " + path);
        }

Marc
Author
2 Aug 2006 4:21 PM
Zhiv Kurilka
Thanks just what I needed
Show quoteHide quote
"Marc Gravell" <marc.grav***@gmail.com> schrieb im Newsbeitrag
news:%23gPaq0ktGHA.3964@TK2MSFTNGP04.phx.gbl...
> Something like (C# - and I've been lazy using string concatenation):
>
>        XmlDocument doc = new XmlDocument();
>        doc.LoadXml(xml);
>        foreach (XmlElement el in doc.SelectNodes("/root/a/b[c='10']"))
>        {
>            string name = el.SelectSingleNode("name").InnerText, path = "";
>            foreach (XmlElement pathEl in
> el.SelectNodes("ancestor-or-self::*/name"))
>            {
>                path += "/" + pathEl.InnerText;
>            }
>            Debug.WriteLine(name + ": " + path);
>        }
>
> Marc
>