在.C#XML元素中查找十进制
我的C#API找不到元素小数有问题(返回错误) 这是XML文件在.C#XML元素中查找十进制,c#,xml,C#,Xml,我的C#API找不到元素小数有问题(返回错误) 这是XML文件 <CHandlingDataMgr> <HandlingData> <Item type="CHandlingData"> <handlingName>Plane</handlingName> <fMass value="140000.000000" /> <
<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,很难为您提供帮助。Touri.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()