要素「aaa」のプレフィックス「xx」を持つ属性「abc」を作成する必要があります。次のコードは接頭辞を追加しますが、namespaceUriも要素に追加します。
必要な出力:
<mybody>
<aaa xx:abc="ddd"/>
<mybody/>
私のコード:
XmlNode node = doc.SelectSingleNode("//mybody");
XmlElement ele = doc.CreateElement("aaa");
XmlAttribute newAttribute = doc.CreateAttribute("xx","abc",namespace);
newAttribute.Value = "ddd";
ele.Attributes.Append(newAttribute);
node.InsertBefore(ele, node.LastChild);
上記のコードは以下を生成します:
<mybody>
<aaa xx:abc="ddd" xmlns:xx="http://www.w3.org/1999/XSL/Transform"/>
<mybody/>
望ましい出力は
<mybody>
<aaa xx:abc="ddd"/>
<mybody/>
そして「xx」属性の宣言は次のようにルートノードで行われるべきです:
<ns:somexml xx:xsi="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://x.y.z.com/Protocol/v1.0">
必要な形式で出力を取得するにはどうすればよいですか? xmlがこの望ましい形式でない場合は、処理できません。
誰か助けてもらえますか?
ありがとう、ヴィッキー
ルートノードに直接関連する属性を設定するだけの問題だと思います。これがサンプルプログラムです:
using System;
using System.Globalization;
using System.Xml;
class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
string ns = "http://sample/namespace";
XmlAttribute nsAttribute = doc.CreateAttribute("xmlns", "xx",
"http://www.w3.org/2000/xmlns/");
nsAttribute.Value = ns;
root.Attributes.Append(nsAttribute);
doc.AppendChild(root);
XmlElement child = doc.CreateElement("child");
root.AppendChild(child);
XmlAttribute newAttribute = doc.CreateAttribute("xx","abc", ns);
newAttribute.Value = "ddd";
child.Attributes.Append(newAttribute);
doc.Save(Console.Out);
}
}
出力:
<?xml version="1.0" encoding="ibm850"?>
<root xmlns:xx="http://sample/namespace">
<child xx:abc="ddd" />
</root>