【发布时间】:2019-05-30 15:42:44
【问题描述】:
如何针对没有前缀/命名空间的XmlDocument 遍历特定的 xpath?
我正在像这样解析 XML:
var doc = new XmlDocument();
doc.LoadXml(input);
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace(nsPrefix, ns);
var nodes = doc.SelectNodes(xpath, nsmgr);
当nsPrefix 和ns 被传入并且非空时,这完全正常。
但是,例如在这种情况下,当命名空间/前缀为空时:
然后我无法正确解析 XML。
完整的功能是:
public static class XPathWalker
{
public static IEnumerable<string> GetListOfAttachments(string input, string xpath, string nsPrefix, string ns)
{
var doc = new XmlDocument();
doc.LoadXml(input);
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace(nsPrefix, ns);
var nodes = doc.SelectNodes(xpath, nsmgr);
foreach (XmlNode node in nodes)
{
if (string.IsNullOrWhiteSpace(node.InnerText))
{
continue;
}
yield return node.InnerText;
}
}
}
如何针对没有前缀/命名空间的 XmlDocument 迭代特定 xpath?
【问题讨论】:
-
如果你根本不关心命名空间,而是想使用
System.Xml.Linq,你可以use LocalName -
@Crowcoder 谢谢!但这意味着我将重新实现。有创可贴解决方案吗?
-
@BrootsWaymb "可能" 不付账单,你是说使用 xmldocument 不可能 忽略命名空间?
-
我真的不知道,很久没用
XmlDocument了。