私は以下のような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
それから、私はdata/tab, buy_price_rate
が必要trade_info内部ノードから抽出する必要があります。
だから、最初は私がこれを考えていた:
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();
}
しかし、動作するようには思えないし、それをデバッグする方法にはわからないイムありません。
私が得た最初のエラーから、ヌルエクスプレッションは、一部のクライアントが全くtrade_infoを持っていないので、node.Descendants("trade_info")
から来ている可能性があります。
私はまた、いくつかから来ている信じて:
Id = n.Element("tab_list").Element("data").Element("tab").Value,
Buy = n.Element("buy_price_rate").Value
のように、時には彼らは、リストまたはbuy_price_rate上のアイテムを持っていけません。
- は、どのようにそれがnullで天気を私は私のクエリ 以内に確認するか、または確保するためではない、それ
- は私のクエリは、私が欲しいもののためにOKですか?
- 変更する必要はありますか?アドバイス?
私のドキュメントは 'XDocument doc = XDocument.Load(file);'です。 – Prix
コードやXMLを投稿する場合は、テキストエディタでこれらの行をハイライト表示し、エディタツールバーの[コード]ボタン(101 010)をクリックして、フォーマットや構文を強調表示してください! –