我的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" />
</SubHandlingData>
</Item>
</Item>
请注意:SubHandlingData位于同一项目的单独子部分中,调用第二个项目类型。
这是C#代码:
private void button2_Click(object sender, EventArgs e)
{
var items = doc.Descendants("HandlingData").Elements("Item");
var query = from i in items
select new
{
HandlingName = (string)i.Element("handlingName"), (decimal?)i.Element("fThrust").Attribute("value"),
HandlingType = (string)i.Element("handlingType")
};
StringBuilder test = new StringBuilder();
foreach (var item in query)
{
var k = item.dunno;
test.Append(k);
richTextBox1.Text = test.ToString();
}
}
上面的代码工作正常,但不适用于SubHandlingData。这意味着没有看到像HandlingType这样的值,我添加了这个&amp;的元素。它返回错误,也尝试包括多个后代,然后找不到HandlingName或HandlingType。我希望我的输出是在handlingType ==“HANDLING_TYPE_FLYING”,richtextbox1.text = this.HandlingName。我希望我已经清楚地解释了这一点,以获得答案,因为这让我困扰了一段时间。
我的问题简而言之:程序在我的XML文档中找不到任何SubHandlingData。
简而言之:如何在<SubHandlingData>
内找到<item>
(如何在同一项目中查找代码的子部分)
答案 0 :(得分:3)
从@ Matthew的编辑中,您可以看到<Item>
内的<SubHandlingData>
未关闭。如果您的实际XML具有这样的结构,那么它将无法成功解析为XDocument
。但是,如果您的实际XML已关闭,那么我假设:
<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>
</SubHandlingData>
</Item>
</HandlingData>
...然后我们可以继续。您可以尝试按照从外Item
到handlingType
的路径,即:SubHandlingData&gt;项目&gt; handlingType,从当前外部项获取handlingType数据:
var query = from i in items
select new
{
HandlingName = (string)i.Element("handlingName"),
HandlingType = (string)i.Element("SubHandlingData")
.Element("Item")
.Element("handlingType")
};