在.Element C#XML中查找十进制

时间:2014-08-12 10:31:20

标签: c# xml

我的C#API出现问题,找不到元素小数(返回错误) 这是XML文件

 <CHandlingDataMgr>
    <HandlingData>
        <Item type="CHandlingData">
            <handlingName>Plane</handlingName>
            <fMass value="140000.000000" />
            <SubHandlingData>
                <Item type="CFlyingHandlingData">
                    <handlingType>HANDLING_TYPE_FLYING</handlingType>
                    <fThrust value="0.630000" />
        </Item>
        </Item>
</SubHandlingData>
</HandlingData>

我的目标是展示handlingName&amp; fMass值进入我的RichTextBox

这是C#代码:

string path = "Data//handling4.meta";
var doc = XDocument.Load(path);
var items = doc.Descendants("HandlingData").Elements("Item");
var query = from i in items
            select new
            {
                HandlingName = (string)i.Element("handlingName"),
                HandlingType = (string)i.Element("SubHandlingData")
                                        .Element("Item")
                                        .Element("handlingType")//.Attribute("value").Value
            };
StringBuilder test = new StringBuilder();
foreach (var item in query)
{
    string k = item.HandlingName + item.HandlingType ; 
    test.Append(k);
    richTextBox1.Text = test.ToString(); 
}

以上代码完美运行,提供处理名称和处理类型,我的问题是推力值,因为推力值是十进制,但是subhandlingdata是一个字符串(标签),所以我的问题是如何在字符串的元素中找到一个小数?

我尝试将(decimal?)置于.Element("fThrust").Value的许多不同部分,但没有运气。如果使用(decimal?)i.Element("fThrust").Attribute("value"),则返回'not set to object',因为此方法不会查看子项(subHandlingData)

提前致谢

1 个答案:

答案 0 :(得分:4)

您需要选择内部项目中的fThrust元素,而不是外部元素 - 就像您已经为HandlingType做的那样:

Thrust = (decimal?) i.Element("SubHandlingData")
                     .Element("Item")
                     .Elements("fThrust") // There may not be an element
                     .Attributes("value")
                     .FirstOrDefault()