XML 使用 XmlNode 进行解析

XML Parsing using XmlNode

在我的应用程序中,我得到一个 XML Response 并且我正在尝试使用 XmlNode.

转换该 XML 响应

我的 XML 文件:File

XML 内容将是这样的:

<account name="santosh@mx.omit-solutions.com" id="876e6b55-5a9c-44ff-a418-af737c47d2af">
  <a n="mobile">91 998977245009</a>
  <a n="zimbraMailDeliveryAddress">santosh@mx.omit-solutions.com</a>
  <a n="zimbraPrefIMLogChats">TRUE</a>
</account>
<account name="mani@mx.omit-solutions.com" id="ce91d3bf-83b8-4a55-a92e-2e080fa4a21b">
  <a n="zimbraMailDeliveryAddress">mani@mx.omit-solutions.com</a>
  <a n="zimbraPrefShowSearchString">FALSE</a>
  <a n="zimbraPrefIMLogChats">TRUE</a>
</account>

这里我展示了来自 XML 响应的两个示例帐户,我需要遍历所有 account nodes 并获得 zimbraMailDeliveryAddress,这肯定会在每个节点中可用还有 mobile 元素值 ('91 998977245009') 可能不是每个节点都可用(即标签根本不可用)。

有没有办法获得这些值?

我试过像这样使用 XmlNamespaceManager

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("bc", "urn:zimbraAdmin");
XmlNode result = doc.SelectSingleNode("//bc:account", mgr);
if (result != null)
{
    Console.WriteLine("Found {0}.", result.InnerText);
}
else
{
    // handle case that no element was found
    Console.WriteLine("No element found.");
}

但是通过使用此代码,我只获得了 first account node 数据并且我无法循环遍历 all account nodes

谁能帮帮我?

SelectSingleNode 只会return一个节点。 SelectNodes return 是一个节点列表 (XmlNodeList) 并且可能是您正在寻找的所有节点。

Link to the specification of XmlNode.SelectNodes

我建议放弃 XmlDocument 和 XPath,改用 LINQ to XML:

var doc = XDocument.Parse(xml);

XNamespace ns = "urn:zimbraAdmin";

foreach (var account in doc.Descendants(ns + "account"))
{
    var mobile = (string)account.Elements(ns + "a")
        .SingleOrDefault(e => (string)e.Attribute("n") == "mobile");

    var address = (string)account.Elements(ns + "a")
        .SingleOrDefault(e => (string)e.Attribute("n") == "zimbraMailDeliveryAddress");
}

在此处查看使用您的文件的工作演示:https://dotnetfiddle.net/UOV40v