前提・実現したいこと
C#にてXMLファイルからデシリアライズした内容を、別ファイルに同内容、同構造でシリアライズしたいです。
XMLファイルは以下の同要素名の階層が、繰り返し入れ子となっています。
XML
1<main> 2 <products> 3 <product name=pan> 4 <substance name=komugi> 5 </substance> 6 <substance name=sio> 7 </substance> 8 </product> 9 <product name=gohan> 10 <substance name=kome> 11 </substance> 12 <substance name=mizu> 13 </substance> 14 </product> 15 </products> 16</main>
発生している問題・エラーメッセージ
シリアライズして出力した際に階層がおかしくなります。現状の出力結果は以下の通りです。
XML
1<main> 2 <products> 3 <product name=pan> 4 <substance name=komugi> 5 </substance> 6 <substance name=sio> 7 </substance> 8 <substance name=kome> 9 </substance> 10 <substance name=mizu> 11 </substance> 12 </product> 13 <product name=gohan> 14 </product> 15 </products> 16</main>
該当のソースコード
現状のソースコードになります。
C#
1var output_xml = XDocument.Load(output_xml_filename).Element("main"); 2 3var xml = XDocument.Load(xml_filename).Element("main"); 4 5foreach (var main in xml.Elements("main")) 6{ 7 foreach(var products in main.Elements("products")) 8 { 9 output_xml.Add(new XElement("products")); 10 var output_products = output_xml.Element("products"); 11 12 foreach(var product in products.Elements("product")) 13 { 14 product_name = product.Attribute("name").Value; 15 output_products.Add(new XElement("product" 16 , new XAttribute("name", product_name))); 17 var output_products_product = output_products.Element("product"); 18 19 foreach(var substance in product.Elements("substance")) 20 { 21 substance_name = substance.Attribute("name").Value; 22 output_products_product.Add(new XElement("substance" 23 , new XAttribute("name", substance_name))); 24 } 25 } 26 } 27}
試したこと
すみません。他の方法が思いつかず手詰まりになってしまっています。何卒ご教授頂きたいです。
補足情報(FW/ツールのバージョンなど)
開発はVisualStadio2017です。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/15 01:01