首页 > 解决方案 > 使用 xpath 迭代 XmlDocument

问题描述

我们如何使用 xpath 迭代 XmlDocument?

我正在尝试通过 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;
    }

但是,计数始终为 0 !

我正在使用这个 xpath。注意我是如何只使用 1 个命名空间的:

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

文件头如下所示:

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

我确定我使用的是正确的 xpath,因为我针对我的有效负载对其进行了测试:

在此处输入图像描述

我这样调用函数:

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

我们如何使用 xpath 迭代 XmlDocument?也许 XmlDocument 应该是一个 XDocument 代替?

标签: c#.netxmlxpath

解决方案


推荐阅读