C# 将xpath与c结合使用,帮助
我正在尝试选择下面XML的MINRANGE内容。这是我正在使用的代码,字符串min只是给了我一个长文本块,而不是我想要的节点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 =
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);
}
}
}