[英]Cannot find item name C# XML
我的XML文檔有問題。
我希望我的程序在XML文件中查找項目的所有值,但前提是該handlingType是某個字符束。
代碼(C#):
string path = "//files//handling.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("HandlingType"),
Mass = (decimal?)i.Element("fMass")
};
foreach (var HandlingType in items)
{
if (HandlingType.ToString() == "HANDLING_TYPE_FLYING")
{
MessageBox.Show(HandlingType.ToString());
}
}
上面的代碼演示了我想發生的事情的簡短版本,但是找不到此handlingType(不顯示messageBox)
這是XML:
<CHandlingDataMgr>
<HandlingData>
<Item type="CHandlingData">
<handlingName>Plane</handlingName>
<fMass value="380000.000000"/>
<handlingType>HANDLING_TYPE_FLYING</handlingType>
</Item>
<Item type="CHandlingData">
<handlingName>Car1</handlingName>
<fMass value="150000.000000"/>
<handlingType>HANDLING_TYPE_DRIVING</handlingType>
</Item>
</HandlingData>
</CHandlingDataMgr>
我希望輸出如果包含某個HandlingType例如,則顯示handlingName
if (handlingType == "HANDLING_TYPE_FLYING")
{
messageBox.Show(this.HandlingName);
}
簡而言之,我的問題是:程序找不到項目的處理類型,它確實找到了標簽,但是當要求顯示時,返回空/無顯示。
編輯:此外,在XMLhandling_type_flying中還包含在每個項目(例如汽車)中找不到的額外元素(例如推力),我希望程序也可以找到這些元素。 (這是我面臨的第二個問題,也許應該問第二個問題?)
需要修復的幾件事。
foreach (var item in query)
HandlingType = (string)i.Element("handlingType"),
Mass = i.Element("fMass").Attribute("value").Value
這是包含所有修復程序的代碼。
class Program
{
static void Main()
{
const string path = "//files//handling.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("handlingType"),
Mass = i.Element("fMass").Attribute("value").Value
};
foreach (var item in query)
{
if (item.HandlingType == "HANDLING_TYPE_FLYING")
{
//Remove messagebox if consoleapp
MessageBox.Show(item.HandlingType);
MessageBox.Show(item.HandlingName);
Console.WriteLine(item.HandlingType);
Console.WriteLine(item.HandlingName);
}
}
}
}
我建議您考慮將xml序列化為一個對象。
如果您查看http://msdn.microsoft.com/zh-cn/library/system.xml.linq.xelement(v=vs.110).aspx,則ToString()方法不會返回標記的名稱,但縮進XML。
您應該改為使用Value屬性。 另外,您應該使用.equals(“ ...”)而不是==
if (handlingType.Value.equals("HANDLING_TYPE_FLYING")
{
messageBox.Show(this.handlingname);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.