我有一个像下面这样的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();
}
但是它似乎不起作用,我不确定如何进行调试。
从我得到的第一个错误中,空指针异常,我认为它可能来自于node.Descendants("trade_info")
,因为有些客户根本没有交易信息。
我还认为有一些问题来自于:
Id = n.Element("tab_list").Element("data").Element("tab").Value,
Buy = n.Element("buy_price_rate").Value
有时他们的列表上没有物品或购买价格比率。
- 如何在我的查询中检查它是否为null以确保安全?
- 我的查询对于我想要的是否可以?
- 我应该改变什么?建议?
XDocument doc = XDocument.Load(file);
,你的回复对我来说有点含糊不清,但还是谢谢。 - Prix