在.C#XML元素中查找十进制

在.C#XML元素中查找十进制,c#,xml,C#,Xml,我的C#API找不到元素小数有问题(返回错误) 这是XML文件 <CHandlingDataMgr> <HandlingData> <Item type="CHandlingData"> <handlingName>Plane</handlingName> <fMass value="140000.000000" /> <

我的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>
上面的代码工作得很好,提供了处理名称和处理类型,但是我的问题是推力值,因为推力值是十进制的,而subhandlingdata是字符串(标记),所以我的问题是如何在字符串元素中找到十进制数

我曾尝试将
(decimal?
放入
元素(“fThrust”).Value的许多不同部分,但运气不佳。如果使用
(decimal?)i.Element(“fThrust”).Attribute(“value”)
它会返回“notset to object”,因为此方法不会查看子项(subHandlingData)内部


提前感谢

您需要在内部项中选择
fThrust
元素,而不是外部项-就像您已经在为
处理类型
所做的那样:

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

您的XML无效(在关闭项之前关闭SubHandlingData),并且您的代码很难读取,因为您没有正确格式化它。请把这些修好。如果看不到有效的XML,很难为您提供帮助。Tour
i.Element(“fThrust”)
尝试将失败,因为
fThrust
在内部项中,而不是外部项中。您的XML仍然无效。请自己查看文档,我已上载到Google Drive并缩短了链接:,我相信我的XML看起来可以吗?这个项目位于底部附近,我还有一个单独的程序中的所有其他元素(我的问题是subhandlingdata中的所有元素),我敢说真正的XML是可以的,但问题中的版本不是。你有
。我会尝试真正的文档,但你也应该解决这个问题。对象引用未设置为对象的实例=(@Thirisangu XAttribute有一个针对Nullable的显式强制转换重载…您不能使用这样的Value属性。您必须将其解析为十进制,而不是强制转换。@Thirisangu:请不要猜测我的代码所需的更改,而是尝试我的实际代码。请查看
XAttribute
的文档,了解所有显式转换的详细信息。)可用。当您希望值作为字符串时,您只想使用
Value
。@DannyNichols:好的,试试我修改过的答案。基本上,它会尝试查找
项下的所有
fThrust
元素,这可能意味着其中的0个元素……基本上,您最终会得到一个属性或null,并且您可以转换为
十进制?
。你知道为什么当你在两个半小时前最初问这个问题时,关于文档的信息会非常好吗?@JamieKeeling:如果
子处理数据
元素丢失,它会失败,但它会处理
fThrust
元素丢失。这是一致的根据OP告诉我们的doc的预期性质。
Thrust = (decimal?) i.Element("SubHandlingData")
                     .Element("Item")
                     .Elements("fThrust") // There may not be an element
                     .Attributes("value")
                     .FirstOrDefault()