0

How do we iterate an XmlDocument using an xpath?

I'm attempting to return a list of nodes by xpath:

    public static List<string> Filter(string xpath, string input, string ns, string nsUrl)
    {
        var bytes = Encoding.UTF8.GetBytes(input); //i believe this unescapes the string
        var stream = new MemoryStream(bytes);
        var doc = new XmlDocument();
        XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable);
        namespaceManager.AddNamespace(ns, nsUrl);
        var links = new List<string>();
        var nodes = doc.SelectNodes(xpath, namespaceManager);
        using (var reader = new XmlTextReader(stream))
        {
            reader.Namespaces = false;
            doc.Load(reader);
        }
        foreach (XmlNode node in nodes)
        {
            if (IsNullOrWhiteSpace(node.InnerText))
            {
                continue;
            }
            links.Add(node.InnerText);
        }

        return links;
    }

however, the count is always 0 !

I'm using this xpath. notice how i am using only 1 namespace:

/ns0:Visit/ns0:DocumentInterface/ns0:Documents/ns0:Document/ns0:BinaryData

The header of the file looks like this:

<ns0:Visit xmlns:ns0="http://NameSpace.ExternalSchemas.Patient"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

I'm certain that I am using the right xpath because I tested it against my payload:

enter image description here

I'm calling the function this way:

var links = Filter(xpath, xml, "ns0", "http://NameSpace.ExternalSchemas.Patient");

How do we iterate an XmlDocument using an xpath? Perhaps the XmlDocument should be an XDocument instead?

Alex Gordon
  • 57,446
  • 287
  • 670
  • 1,062

0 Answers0