C# 在XmlDocument中按名称搜索节点
我正在尝试使用以下代码在XmlDocument中按名称查找节点:C# 在XmlDocument中按名称搜索节点,c#,xmldocument,C#,Xmldocument,我正在尝试使用以下代码在XmlDocument中按名称查找节点: private XmlNode FindNode(XmlNodeList list, string nodeName) { if (list.Count > 0) { foreach (XmlNode node in list) { if (node.Name.Equals(nodeName)) return node; if (
private XmlNode FindNode(XmlNodeList list, string nodeName)
{
if (list.Count > 0)
{
foreach (XmlNode node in list)
{
if (node.Name.Equals(nodeName)) return node;
if (node.HasChildNodes) FindNode(node.ChildNodes, nodeName);
}
}
return null;
}
我使用以下命令调用函数:
FindNode(xmlDocument.ChildNodes, "somestring");
出于某种原因,它总是返回null,我不知道为什么。有人能帮我解决这个问题吗?更改这行:
if (node.HasChildNodes) FindNode(node.ChildNodes, nodeName);
致:
已编辑:代码现在更正确(已测试);) 为什么你不能使用
Node.SelectSingleNode(".//" + nodeName)
? 谢谢,伙计。有点愚蠢,我错过了这么简单的东西。有时候,你检查代码越多,修复成功的机会就越少…:完成附加问题:如果我有一个具有多个路径的XML结构,即:它似乎只导航第一棵树(到c),但使用上述方法找不到e。这是我的代码的预期行为吗?对不起,我没有很好地阅读您的评论。我已经编辑了这篇文章,现在它更正确了(我也用您的示例测试了它),无论如何,我仍然建议您检查XPath导航是否适合您的需要,或者可能LINQ到XmlDocument而不仅仅是XmlDocument.GetElementsByTagName(nodeName)?如果您的xml中已经定义了任何名称空间,您可能会遇到异常:需要名称空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数。
Node.SelectSingleNode(".//" + nodeName)