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

时间:2013-06-04 09:13:09

标签: c# xml

我想在网址的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>

我想要的具体价值是最小卖出价值,即166.22。我当前的代码只是检索文档中的所有值

private void Form1_Load(object sender, EventArgs e)
{
    string xmlDocPath = "http://api.eve-central.com/api/marketstat?typeid=37&regionlimit=10000002&usesystem=30000142";
    XmlTextReader xmlReader = new XmlTextReader(xmlDocPath);
    while (xmlReader.Read())
    {
        if (xmlReader.NodeType == XmlNodeType.Text)
        {
            textBox1.AppendText(xmlReader.Value + "\n");
        }               
    }
}

我尝试了一些不同的方法,比如将它们全部放在文本框中并采用特定的行,但这似乎是一个非常愚蠢的解决方案。大多数教程都使用控制台,但这对我不起作用。我觉得这可能是一个简单的解决方案,但我还没找到一个有效的解决方案。此外,对于这个相当新的,如果这个代码有任何非常低效的东西,请随意指出。

2 个答案:

答案 0 :(得分:6)

尝试使用LINQ to XML,这非常简单。示例如下:

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

答案 1 :(得分:2)

如果将XmlTextReader包装到XmlDocument中,则可以对其执行XPath查询,使其感兴趣的是retrieve the specific node

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