У меня есть 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();
}
Но, похоже, он не работает, и я не уверен, как его отладить.
С первой полученной мной ошибки, Null Expection, я верю этомуможет быть из 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.
- Как проверить в своем запросе, является ли он пустым или нет, чтобы обезопасить его
- В порядке ли мой запрос для того, что я хочу?
- Чтоя должен измениться?Советы?