XML完整文件读取C#

时间:2014-08-07 09:51:06

标签: c# xml

所以我有一个部分读入XML文档的代码,用第一个结果块来表示我很好,但是我有一个包含多个相同代码块的文件。我的程序似乎在第一次退出后退出。

以下是代码:

string path = "data//handling.meta";
var doc = XDocument.Load(path);
var items = doc.Descendants("HandlingData").Elements("Item");//.ToArray();
var query = from i in items
            select new 
            {
                HandlingName = (string)i.Element("handlingName"),
                Mass = (decimal?)i.Element("fMass").Attribute("value"), 
                InitialDragCoeff = (decimal?)i.Element("fInitialDragCoeff").Attribute("value"), 
                PercentSubmerged = (decimal?)i.Element("fPercentSubmerged").Attribute("value"), 
                DriveBiasFront = (decimal?)i.Element("fDriveBiasFront").Attribute("value"), 
                InitialDriveGears = i.Element("nInitialDriveGears").Attribute("value")
            }
string test = ("{0} - {1}" + query.First().HandlingName + query.First().Mass + query.First().InitialDragCoeff);
richTextBox1.Text = test;

这是XML文档:

<?xml version="1.0" encoding="UTF-8"?>

<CHandlingDataMgr>
  <HandlingData>
    <Item type="CHandlingData">
      <handlingName>Car1</handlingName>
      <fMass value="140000.000000" />
      <fInitialDragCoeff value="30.000000" />
      <fPercentSubmerged value="85.000000" />
      <vecCentreOfMassOffset x="0.000000" y="0.000000" z="0.000000" />
      <vecInertiaMultiplier x="1.000000" y="1.000000" z="1.000000" />
      <fDriveBiasFront value="1.000000" />
      <nInitialDriveGears value="1" />
    </Item>
    <Item type="CHandlingData">
      <handlingName>Car2</handlingName>
      <fMass value="180000.000000" />
      <fInitialDragCoeff value="7.800000" />
      <fPercentSubmerged value="85.000000" />
      <vecCentreOfMassOffset x="0.000000" y="0.000000" z="0.000000" />
      <vecInertiaMultiplier x="1.000000" y="1.300000" z="1.500000" />
      <fDriveBiasFront value="0.200000" />
      <nInitialDriveGears value="6" />
    </Item>
 </HandlingData>
</CHandlingDataMgr>   

如图所示,有多个处理名称。上面的CSharp代码确实有效,但仅适用于第一个块和我想知道如何让它从不同的处理名称读取相同的值。

我试过了:

if (query.First().HandlingName == "Car2")
{
    MessageBox.Show("Car 2 found");
}

但是由于消息框从未出现过,我认为这段代码没有读取孔文件?

我希望输出如下:

Name: Car 1 
Mass: 140000.000000
InitialDragCoeff: 30.000000

Name: Car 2
Mass: 180000.000000
InitialDragCoeff: 7.800000

我在坚果壳中的问题&#39; :程序没有看到Car 2

任何帮助都会非常感激,因为我已经尝试了很多解决方案。今天阅读了很多关于XML的页面

1 个答案:

答案 0 :(得分:1)

你有:

string test = ("{0} - {1}" + query.First().HandlingName + query.First().Mass 
         +  query.First().InitialDragCoeff);

它只会让你获得第一个元素,因为那就是你要求的。

我想你可能想循环:

foreach (var item in query) {
  var s = "{0} - {1}" + item.HandlingName + query.item.Mass 
         +  item.InitialDragCoeff
  // …
}