从包含格式良好的XML导航的字符串构造XML文档的有效方法?

New*_*bie 6 .net c# xml

我有一个包含格式良好的xml的字符串.我想导航该字符串中的XML以提取某些节点中的文本.如何使用内置的.NET类有效地完成此任务.您将使用哪个.NET XML类?为什么?

非常感谢您的帮助.

注1:Linq不适用于我.注意2:编辑XML并不重要.我只需要只读访问权限.

Rob*_*ney 11

为了速度,使用XmlReader:

using (StringReader sr = new StringReader(myString))
using (XmlReader xr = XmlReader.Create(sr))
{
    while (xr.Read())
    {
        if (xr.NodeType == XmlNodeType.Element && xr.Name == "foo")
        {
            Console.WriteLine(xr.ReadString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面打印出XML文档中名为"foo"的每个元素的文本内容.(好吧,有点. ReadString不能非常优雅地处理嵌套元素.)

使用a XPathDocument比较慢,因为整个文档在开始搜索之前都会被解析,但它具有简单性的优点:

using (StringReader sr = new StringReader(myString))
{
    XPathDocument d = new XPathDocument(sr);
    foreach (XPathNavigator n in d.CreateNavigator().Select("//foo/text()"))
    {
        Console.WriteLine(n.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不关心性能或内存利用率,最简单的方法是使用XmlDocument:

XmlDocument d = new XmlDocument();
d.LoadXml(myString);
foreach (XmlNode n in d.SelectNodes("//foo/text()"))
{
   Console.WriteLine(n.Value);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 10

导航?可能XPathDocument:

string s = @"<xml/>";
XPathDocument doc = new XPathDocument(new StringReader(s));
Run Code Online (Sandbox Code Playgroud)

来自MSDN,

使用XPath数据模型提供XML文档的快速,只读,内存中表示.

XmlDocumentetc 不同,它针对只读使用进行了优化; 效率更高但功能更弱(即你无法编辑它).有关如何查询的说明,请参见此处.

  • 应该注意的是,在某些类型的XPath查询中,`XPathDocument`实际上更快_significantly_更快; 特别是涉及"前面"或"前面 - 兄弟"轴的任何东西. (2认同)