C# 将xpath与c结合使用,帮助

C# 将xpath与c结合使用,帮助,c#,xpath,C#,Xpath,我正在尝试选择下面XML的MINRANGE内容。这是我正在使用的代码,字符串min只是给了我一个长文本块,而不是我想要的节点 XPathDocument _BTCall = new XPathDocument(callUrl); XPathNavigator nav = _BTCall.CreateNavigator(); XPathExpression exp; exp = nav.Compile("//MAX/MINRANGE"); XPathNodeIterator iterator =

我正在尝试选择下面XML的MINRANGE内容。这是我正在使用的代码,字符串min只是给了我一个长文本块,而不是我想要的节点

XPathDocument _BTCall = new XPathDocument(callUrl);
XPathNavigator nav = _BTCall.CreateNavigator();
XPathExpression exp;
exp = nav.Compile("//MAX/MINRANGE");
XPathNodeIterator iterator = nav.Select(exp);
iterator.MoveNext();

XPathNavigator nav2 = iterator.Current.Clone();
string min = nav.Value;
return int.Parse(min);

出于格式化的目的,对XML中的文本进行了轻微修改。有关详细信息,请参阅以前的版本。

您使用的是.Net framework的哪个版本?如果您使用的是3.5或更高版本,我强烈建议您使用Linq来处理Xml,这样您会轻松得多。查看XDocument和相关课程


您使用的是什么版本的.Net framework?如果您使用的是3.5或更高版本,我强烈建议您使用Linq来处理Xml,这样您会轻松得多。查看XDocument和相关课程

使用XmlDocument实例并将XML加载到其中,然后使用SelectNodes方法将xpath查询作为输入参数传递

        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(xmlText);
        var gg = xmlDocument.SelectNodes("//MAX/MINRANGE");
这将为您提供一个可以迭代的节点集合。

使用XmlDocument实例并将XML加载到其中,然后使用SelectNodes方法将xpath查询作为输入参数传递

        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(xmlText);
        var gg = xmlDocument.SelectNodes("//MAX/MINRANGE");

这将为您提供一个可以迭代的节点集合。

您需要捕获iterator.MoveNext的结果


iterator.MoveNext不会修改原始导航对象。

您需要捕获iterator.MoveNext的结果


iterator.MoveNext不会修改原始的nav对象。

实际上有很多不同的方法来选择XmlNode的内容。让我分享一些。当然,您可以修改代码以使用Xml字符串,而不是从Xml文件加载

使用XmlDocument对象并选择SingleNode

使用XDocument对象和元素

使用XDocument对象和LINQ查询


XPath的正确性始终是很重要的,关于使用XmlDocument和XDocument的帮助,请参阅Msdn文档。

选择XmlNode内容的方法实际上有很多种。让我分享一些。当然,您可以修改代码以使用Xml字符串,而不是从Xml文件加载

使用XmlDocument对象并选择SingleNode

使用XDocument对象和元素

使用XDocument对象和LINQ查询


XPath的正确性始终是很重要的,并且始终参考Msdn文档以获取有关使用XmlDocument和XDocument的帮助。

Im使用2.0,如果我可以使用Linq,这将很容易@Tom Squires您可以使用LinqBridge在.NET2.0中使用Linq。虽然我不确定xml qureies,但是对于sql来说效果很好。我使用2.0,如果我可以使用Linq,那就很容易了@Tom Squires您可以使用LinqBridge在.NET2.0中使用Linq。虽然我不确定xml qureies是否正确,但对于sql来说效果很好。但是MoveNext返回布尔值而不是XPathNavigator?@Tom Thank,需要迭代器的当前值。但是MoveNext返回布尔值而不是XPathNavigator?@Tom Thank,需要迭代器的当前值。
XPathNodeIterator iterator = nav.Select(exp);
if (iterator.MoveNext())
{
   XPathNavigator res = iterator.Current;
   string min = res.Value;
}
else 
{
   //Error
}
//-----------------------------------------------------------------------------
// <copyright file="Program.cs" company="DCOM Productions">
//     Copyright (c) DCOM Productions.  All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------

namespace ConsoleApplication1 {
    using System;
    using System.Xml;

    class Program {
        static void Main(string[] args) {
            XmlDocument xdoc = new XmlDocument();
            try {
                xdoc.Load(".\\App.xml");
            }
            catch (System.Xml.XmlException ex) {
                // handle
            }
            XmlNode node = xdoc.SelectSingleNode("ADSL_CHECKER//MAX//MINRANGE");
            Console.WriteLine(node.InnerText);
            Console.ReadKey(true);
        }
    }
}
//-----------------------------------------------------------------------------
// <copyright file="Program.cs" company="DCOM Productions">
//     Copyright (c) DCOM Productions.  All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------

namespace ConsoleApplication1 {
    using System;
    using System.Xml;
    using System.Xml.Linq;

    class Program {
        static void Main(string[] args) {
            XDocument xdoc = XDocument.Load(".\\App.xml");
            XElement element = xdoc.Element("ADSL_CHECKER").Element("MAX").Element("MINRANGE");
            Console.WriteLine(element.Value);
            Console.ReadKey(true);
        }
    }
}
//-----------------------------------------------------------------------------
// <copyright file="Program.cs" company="DCOM Productions">
//     Copyright (c) DCOM Productions.  All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------

namespace ConsoleApplication1 {
    using System;
    using System.Linq;
    using System.Xml;
    using System.Xml.Linq;

    class Program {
        static void Main(string[] args) {
            XDocument xdoc = XDocument.Load(".\\App.xml");
            var result = from e in xdoc.Element("ADSL_CHECKER").Element("MAX").Elements()
                         where e.Name == "MINRANGE"
                         select e;
            Console.WriteLine(result.First().Value);
            Console.ReadKey(true);
        }
    }
}