我有一個XML文件中像下面:解析XML與內部節點?
<clients>
<client>
<id>YYYY</id>
<name>XXXX</name>
<desc>ZZZZ</desc>
<trade_info>
<tab_list>
<data>
<tab>book 123</tab>
</data>
<data>
<tab>cook 321</tab>
</data>
</tab_list>
<buy_price_rate>200</buy_price_rate>
</trade_info>
</client>
</clients>
我需要從它id, name, desc
和trade_info我需要data/tab, buy_price_rate
內節點提取。
所以一開始我就在想這個:
var query = from node in doc.Descendants("client")
select new
{
client = new
{
Id = node.Element("id").Value,
Name = node.Element("name").Value,
Desc = node.Element("desc").Value
},
trade = from n in node.Descendants("trade_info")
select new
{
Id = n.Element("tab_list").Element("data").Element("tab").Value,
Buy = n.Element("buy_price_rate").Value
}
};
foreach (var item in query)
{
writeXML.WriteStartElement("tradelist_template");
writeXML.WriteAttributeString("client_id", item.client.Id);
foreach (var trade in item.trade)
{
writeXML.WriteStartElement("tradelist");
writeXML.WriteAttributeString("item_id", trade.Id);
writeXML.WriteEndElement();
}
writeXML.WriteEndElement();
}
但它似乎沒有工作和IM如何調試它不能確定。
從我得到的第一個錯誤,空預期我相信它可能來自於node.Descendants("trade_info")
,因爲有些客戶端根本沒有trade_info。
我也相信的時候有一些從正在添加:
Id = n.Element("tab_list").Element("data").Element("tab").Value,
Buy = n.Element("buy_price_rate").Value
因爲有時他們沒有列表或buy_price_rate上的項目。
- 我如何檢查我的查詢 內羯羊它爲空或不保護它
- 是我的查詢確定爲我想要什麼?
- 我應該改變什麼?建議?
我的文檔是`XDocument doc = XDocument.Load(file);`,你的回覆對我來說似乎有點模糊,但是謝謝。 – Prix 2010-11-24 05:48:01
如果您發佈代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以良好地格式化和語法突出顯示它! – 2010-11-24 06:00:59