
前提・実現したいこと
XML1を読み込み、XML2を出力するC#のプログラムを作成したい。
発生している問題・エラーメッセージ
3つ目のXMLファイルのように、追加した要素に不要な名前空間の属性がある。
該当のソースコード
C#
1private void button_Click(object sender, EventArgs e) 2{ 3 // XMLの読み込み 4 XmlDocument doc = new XmlDocument(); 5 doc.Load("sample.xml"); 6 7 // XMLの子要素作成 8 XmlElement xmlEvent = doc.CreateElement("event"); 9 xmlEvent.InnerText = ""; 10 XmlAttribute xmlAtr = doc.CreateAttribute("Symbol"); 11 xmlAtr.Value = "TestSymbol"; 12 xmlEvent.SetAttributeNode(xmlAtr); 13 14 // XMLの属性削除 15 xmlEvent.RemoveAttribute("xmlns"); //xmlnsは削除されなかった。 16 //xmlEvent.RemoveAttributeAt(0); //追加したSymbolが削除。0ではなく1を指定した所何も削除されなかった。 17 //xmlEvent.RemoveAllAttributes(); //追加したSymbolが削除され、xmlnsは削除されなかった。 18 19 // XMLの孫要素作成 20 XmlElement xmlTitle = doc.CreateElement("title"); 21 xmlTitle.InnerText = "TestAdd"; 22 xmlEvent.AppendChild(xmlTitle); 23 24 // 作成した要素の挿入、保存 25 XmlNodeList x = doc.GetElementsByTagName("eventTest"); 26 XmlNode node = x[0]; 27 node.AppendChild(xmlEvent); 28 doc.Save("test2.xml"); 29}
XML1
1<?xml version = "1.0" encoding = "utf-8"?> 2<Test:test1 xmlns="http://www.test.co.jp/1" xmlns:Test="http://www.test.co.jp/2"> 3 <eventTest> 4 <event Symbol="Test1"> 5 <title>START</title> 6 <type>Immediate</type> 7 </event> 8 </eventTest> 9</Test:test1>
XML2
1<?xml version="1.0" encoding="utf-8"?> 2<Test:test1 xmlns="http://www.test.co.jp/1" xmlns:Test="http://www.test.co.jp/2"> 3 <eventTest> 4 <event Symbol="Test1"> 5 <title>START</title> 6 <type>Immediate</type> 7 </event> 8 <event Symbol="TestSymbol"> 9 <title>TestAdd</title> 10 </event> 11 </eventTest> 12</Test:test1>
XML3
1<?xml version="1.0" encoding="utf-8"?> 2<Test:test1 xmlns="http://www.test.co.jp/1" xmlns:Test="http://www.test.co.jp/2"> 3 <eventTest> 4 <event Symbol="Test1"> 5 <title>START</title> 6 <type>Immediate</type> 7 </event> 8 <event Symbol="TestSymbol" xmlns=""> 9 <title>TestAdd</title> 10 </event> 11 </eventTest> 12</Test:test1>
試したこと
1.以下のコードを実行した。
// XMLの属性削除
xmlEvent.RemoveAttribute("xmlns"); //xmlnsは削除されなかった。
xmlEvent.RemoveAttributeAt(0); //追加したSymbolが削除。0ではなく1を指定した所何も削除されなかった。
xmlEvent.RemoveAllAttributes(); //追加したSymbolが削除され、xmlnsは削除されなかった。
2.以下のXMLファイルの親要素名を変更した。
<Test:test1 xmlns="http://www.test.co.jp/1" xmlns:Test="http://www.test.co.jp/2"></Test:test1>
→ <test1></test1>
こう変更したところ、不要な属性は追加されなくなった。
ただし、この行は別の理由で必要な為、削除することはできない。


回答1件
あなたの回答
tips
プレビュー