Xpath Query not returning results

Last post 04-07-2006 1:49 PM by rstackhouse. 2 replies.

Sort Posts:

  • Xpath Query not returning results

    03-13-2006, 11:25 AM
    • Member
      30 point Member
    • rstackhouse
    • Member since 07-01-2005, 1:20 PM
    • Posts 6

    I am trying to create a proxy file that will support RSS 1.0/2.0 feeds for a Flash RSS Reader.  For the part that parses RSS 1.0 feeds, I have been trying the following without sucess:

    string feed = http://www.moock.org/blog/index.rdf;

    string channelTitle = "";

    string channelLink = "";

    string channelDescription = "";

    System.Xml.XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(feed);

    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);

    nsmgr.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");

    nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");

    nsmgr.AddNamespace("sy", "http://purl.org/rss/1.0/modules/syndication/" );

    nsmgr.AddNamespace("admin", "http://webns.net/mvcb/" );

    nsmgr.AddNamespace("cc", "http://web.resource.org/cc/" );

    nsmgr.AddNamespace("prfx1", "http://purl.org/rss/1.0/");

    XmlElement root = xmlDoc.DocumentElement;

    XmlNodeList nodeList = root.SelectNodes("//prfx1:item", nsmgr);

    if(nodeList.Count > 0)

    {

    nodeList = root.SelectNodes("//prfx1:channel/title", nsmgr);

    if(nodeList.Count > 0)

    channelTitle = nodeList[0].Value;

    nodeList = root.SelectNodes("//prfx1:channel/link", nsmgr);

    if(nodeList.Count > 0)

    channelLink = nodeList[0].Value;

    nodeList = root.SelectNodes("//prfx1:channel/description", nsmgr);

    if(nodeList.Count > 0)

    channelDescription = nodeList[0].Value;

    nodeList = root.SelectNodes("//prfx1:item/title", nsmgr);

    string[] titles = new string[nodeList.Count];

    int i = 0;

    foreach(XmlNode title in nodeList)

    {

    titles[i] = title.Value;

    i++;

    }

    nodeList = root.SelectNodes("//prfx1:item/link", nsmgr);

    string[] links = new string[nodeList.Count];

    i = 0;

    foreach(XmlNode link in nodeList)

    {

    links[i] = link.Value;

    i++;

    }

    nodeList = root.SelectNodes("//prfx1:item/description", nsmgr);

    string[] descriptions = new string[nodeList.Count];

    i = 0;

    foreach(XmlNode description in nodeList)

    {

    descriptions[i] = description.Value;

    i++;

    }

    Response.Write("<?xml version=\"1.0\"?>");

    Response.Write("<rss version=\"2.0\">");

    Response.Write("<channel>");

    Response.Write("<title>"+channelTitle+"</title>");

    Response.Write("<link>"+channelLink+"</link>");

    Response.Write("<description>"+channelDescription+"</description>");

    for(i = 0; i < titles.Length; i++)

    {

    Response.Write("<item>");

    Response.Write("<title>"+titles[i]+"</title>");

    Response.Write("<link>"+links[i]+"</link>");

    Response.Write("<description>"+descriptions[i]+"</description>");

    Response.Write("</item>");

    }

    Response.Write("</channel>");

    Response.Write("</rss>");

    }

     As you can see, I've even tried creating a prefix for a namespace without one in the document as this thread suggested http://forums.asp.net/495107/ShowPost.aspx.  The document itself seems to be well formed, but when I try something like root.SelectNodes("//channel"), I get nothing back.  Conversely, if I try root.OuterXml, I get the entire document back.

    Could someone please tell me where I am going wrong here?

  • Re: Xpath Query not returning results

    03-14-2006, 3:18 PM
    • Member
      90 point Member
    • swordfish666
    • Member since 10-30-2002, 5:10 AM
    • US
    • Posts 18
    Try this:

    XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("index.rdf");//from a loacl file
                XmlNodeList xNodeList =xmlMap.SelectNodes("//channel");
                foreach(XmlNode xNode in xNodeList)
                {
                    if(xNode.Name == "NODE YOU ARE LOOKING FOR")
                    {
                        //do something with xNode<br>
                    }
                }


    Someties using the proper methods just don't work as well as keeping it simple
  • Re: Xpath Query not returning results

    04-07-2006, 1:49 PM
    • Member
      30 point Member
    • rstackhouse
    • Member since 07-01-2005, 1:20 PM
    • Posts 6
    I added this:

    else
                    {
                        //xNodeIterator.Count = 0
                       
                        System.Xml.XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.Load("http://www.moock.org/blog/index.rdf");
                        Response.Write("xmlDoc.FirstChild.Name: "+xmlDoc.FirstChild.Name+"\n");
                        Response.Write("xmlDoc.FirstChild.HasChildNodes: "+xmlDoc.FirstChild.HasChildNodes);
                    }

    and the response i got was this:

    xmlDoc.FirstChild.Name: xml
    xmlDoc.FirstChild.HasChildNodes: FalsexmlDoc.FirstChild.Name: xml
    xmlDoc.FirstChild.HasChildNodes: False
    Something tells me this type of document isn't liked by the parser.  Any suggestions?

Page 1 of 1 (3 items)