我的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)
提前致谢
答案 0 :(得分:4)
您需要选择内部项目中的fThrust
元素,而不是外部元素 - 就像您已经为HandlingType
做的那样:
Thrust = (decimal?) i.Element("SubHandlingData")
.Element("Item")
.Elements("fThrust") // There may not be an element
.Attributes("value")
.FirstOrDefault()