C# 使用c在xml文档中获取特定值#

C# 使用c在xml文档中获取特定值#,c#,xml,C#,Xml,我想在一个url上获取XML文档中的一个特定值,我已经获得了所有值的列表,但我不确定如何选择特定值。XML文档如下所示 <evec_api version="2.0" method="marketstat_xml"> <marketstat> <type id="37"> <buy> <volume>291092912</volume> <avg>137.11</avg>

我想在一个url上获取XML文档中的一个特定值,我已经获得了所有值的列表,但我不确定如何选择特定值。XML文档如下所示

<evec_api version="2.0" method="marketstat_xml">
 <marketstat>
  <type id="37">
   <buy>
    <volume>291092912</volume>
    <avg>137.11</avg>
    <max>156.06</max>
    <min>53.46</min>
    <stddev>31.00</stddev>
    <median>140.28</median>
    <percentile>156.05</percentile>
   </buy>
   <sell>
    <volume>273042044</volume>
    <avg>177.43</avg>
    <max>339.00</max>
    <min>166.22</min>
    <stddev>30.83</stddev>
    <median>170.38</median>
    <percentile>166.26</percentile>
   </sell>
   <all>
    <volume>574134956</volume>
    <avg>154.64</avg>
    <max>339.00</max>
    <min>43.00</min>
    <stddev>42.21</stddev>
    <median>156.05</median>
    <percentile>69.98</percentile>
   </all>
  </type>
 </marketstat>
</evec_api>
我尝试过几种不同的方法,比如把所有的内容都放在一个文本框中,然后选择特定的行,但这似乎是一个非常愚蠢的解决方案。大多数教程都使用console,但这对我来说并不适用。我觉得这可能是一个简单的解决方案,但我还没有找到一个可行的。另外,由于对这一点还比较陌生,如果这段代码有任何低效之处,请随意指出。

尝试使用,它非常简单。举例如下:

var doc = XDocument.Parse(xml); //use XDocument.Load if you have path to a file

string minSell = doc.Descendants("sell")
                    .First()
                    .Element("min")
                    .Value;

Console.WriteLine(minSell); //prints 166.22
尝试使用,它非常简单。举例如下:

var doc = XDocument.Parse(xml); //use XDocument.Load if you have path to a file

string minSell = doc.Descendants("sell")
                    .First()
                    .Element("min")
                    .Value;

Console.WriteLine(minSell); //prints 166.22

如果将该XmlTextReader包装到一个文件中,则可以对其执行XPath查询,以满足您的兴趣:

var doc = new XmlDocument(xmlReader);
doc.Load();
var xpath = "/marketstat/type [@id='37']/sell/min";
var myNode = doc.SelectSingleNode(xpath);

如果将该XmlTextReader包装到一个文件中,则可以对其执行XPath查询,以满足您的兴趣:

var doc = new XmlDocument(xmlReader);
doc.Load();
var xpath = "/marketstat/type [@id='37']/sell/min";
var myNode = doc.SelectSingleNode(xpath);

您使用
XmlTextReader
的任何原因?如果将整个文档加载到LINQtoXML
XDocument
,您的生活会简单得多。此外,您应该将“处理XML的代码”与“处理结果的代码”分开,因为某些示例代码使用控制台并不意味着它对您没有用处;您应该从中提取特定于XML的代码,并按照您的意愿使用它。尝试寻找“解析XML”的方法,甚至在这里寻找您使用
XmlTextReader
的任何原因?如果将整个文档加载到LINQtoXML
XDocument
,您的生活会简单得多。此外,您应该将“处理XML的代码”与“处理结果的代码”分开,因为某些示例代码使用控制台并不意味着它对您没有用处;您应该从中提取特定于XML的代码,并按照您的意愿使用它。尝试寻找“解析XML”的方法,或者甚至在这里FirstOrDefault()会更好吗?@David这确实取决于业务逻辑。我是否还应该检查
元素(“min”)
上的null?这些都是开放性的问题,最好与OpThank协商。谢谢,这似乎是一条路,我见过LINQ,但没有尝试使用它作为解决方案,在某种程度上,我认为这是一种不好的态度。为了确认,我将用xml文档的url替换XDocument.Parse中的xml?这样做似乎不会产生任何结果。同时,我将花一些时间研究Linq,我觉得我自己有时间可以回答这些问题。Linq到XML是一种通用的微软专有技术。XPath允许您以更通用(运行时可更改)的方式执行此操作。此外,微软对XPath和XML的实现已经进行了大量优化。正如你所说,我不得不使用XDocument.Load。FirstOrDefault()会更好吗?@David这真的取决于业务逻辑。我是否还应该检查
元素(“min”)
上的null?这些都是开放性的问题,最好与OpThank协商。谢谢,这似乎是一条路,我见过LINQ,但没有尝试使用它作为解决方案,在某种程度上,我认为这是一种不好的态度。为了确认,我将用xml文档的url替换XDocument.Parse中的xml?这样做似乎不会产生任何结果。同时,我将花一些时间研究Linq,我觉得我自己有时间可以回答这些问题。Linq到XML是一种通用的微软专有技术。XPath允许您以更通用(运行时可更改)的方式执行此操作。此外,微软对XPath和XML的实现已经进行了大量优化。正如您所说,我必须使用XDocument.Load。XPath是一种跨平台、基于标准的机制来实现这一点。XPath是一种跨平台、基于标准的机制。