c# - 使用 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 代替?
解决方案
推荐阅读
- typescript - 如何在打字稿中定义函数调用签名的实现和构造签名
- image-processing - 这个 ImageMagick 脚本如何创建 3D 模型?
- python - Sage / Python:来自非空生成器的空元组
- load-testing - Locust 负载测试:如何在所有其他 API 中为一个特定 API 分配单个用户
- javascript - How to insert React component to HTML template?
- java - Android:用左/右滑动切换活动
- javascript - 单击关闭画布菜单中的另一个链接后,如何使汉堡包按钮返回原始状态
- angular - 在 ng mat-table 上调用渲染行错误时,无法读取未定义的属性
- html - 我想在一个圆圈内放一个圆圈,但问题是我的第一层圆圈是从顶部和左侧裁剪的
- php - PHP 不会从 for 循环在数据库中插入重复项