- ベストアンサー
C#にてXML操作ついて
C#にてXML操作ついて 名簿を作ろうと思いますが、NO1として氏名、年齢入れて登録しますが、次にNO2 新規で登録した後、NO1の方を修正したい時、XMLでの配列方法が分かりません。 どなたかXMLで操作方法、ご存知居ませんか? 例 NO 1 氏名 Aさん 年齢 25歳 NO 2 氏名 Bさん 年齢 30歳
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
XElement elRoot1 = new XElement("ROOT"); 上記は消して既存のelRoot に対してadd()やらaddFirst() やらすればいいと思います。 最後はelRoot.Save() ですね。
その他の回答 (3)
// test.xml <root><p id="1" name="A" age="25"/><p id="2" name="A" age="25"/><p id="3" name="C" age="40"/></root> XElement elRoot = XElement.Load("e:\\test.xml"); var varPs = from p in elRoot.Elements("p") where (p.Attribute("id").Value == "1") select p; foreach (var p in varPs) { // p はXElement 型です。 String strXML = p.Value; } where 節の後ではtrue になるような判定式を。 (int.parse(p.Attribute("Age").Value) >= 10 && int.parse(p.Attribute("Age").Value) < 20) みたいな。 さらに以下を続ければソートも可能 orderby p.Attribute("age").Value
elRoot.Save("test.xml"); elRoot.Load("test.xml"); 難しいですか・・・。がんばってください!
補足
書き出しについて出来ましたが、読み出しについて・・・分かりません。 XElement elRoot = new XElement("ROOT"); { XElement elPerson = XElement.Parse("<p id=\"1\" name=\"A\" age=\"25\"></p>"); elRoot.Add(elPerson); XElement elPerson2 = XElement.Parse("<p id=\"2\" name=\"B\" age=\"30\"></p>"); elRoot.Add(elPerson2); } XElement elP_No1 = elRoot.Elements("p").ElementAt(0); XElement elP_No2 = elRoot.Elements("p").ElementAt(1); elRoot.Save(xmlFileName); //xmlFileNameはファイルの場所 上記は書き出し方法ですが、読み出しについてどの様になりますか? ID1だったらどうやって読みだす? 教えて戴けませんか?
XElement elRoot = new XElement("ROOT"); { XElement elPerson = XElement.Parse("<p id=\"1\" name=\"A\" age=\"25\"></p>"); elRoot.Add(elPerson); XElement elPerson2 = XElement.Parse("<p id=\"2\" name=\"B\" age=\"30\"></p>"); elRoot.Add(elPerson2); } XElement elP_No1 = elRoot.Elements("p").ElementAt(0); XElement elP_No2 = elRoot.Elements("p").ElementAt(1); こんなかんじ?
補足
申し訳ないけど、もっとわかりやすいソースお願いします。 書き出しと読み出し方法。 すみませんがお願いいたします。
補足
すごく参考になりました。ありがとうございます。 もうひとつお願いしたいのですが、新たに追記したい時、最後の行へ追記するには、どう記入しますか? 申し訳ありませんが、お願いいたします。 こちら記入したソースですが、 XElement elRoot = XElement.Load(xmlFileName); var varPs = from p in elRoot.Elements("p") where (p.Attribute("id").Value == textBox4.Text) select p; foreach (var p in varPs) { if (p.Attribute("id").Value == textBox4.Text) { MessageBox.Show("データあります。"); } else { XElement elRoot1 = new XElement("ROOT"); { XElement elPerson = XElement.Parse("<p id=\"" + textBox4.Text+ "\" name=\"" + textBox1.Text + "\" age=\"" + textBox2.Text + "\"seibetu=\"" +comboBox1.Text + "\"></p>"); elRoot1.Add(elPerson); } XElement elP_No1 = elRoot1.Elements("p").ElementAt(0); //この部分だと最初に入れた場所が置換えされてしまうので、もしそのデータがあれば次の行へ記 入したいのですが、どうしたらいいでしょうか?お願いします。 elRoot1.Save(xmlFileName); }