複数の名前空間を含むルート要素を使用してXmlDocument
を作成する必要があります。 C#2.0または3.0を使用しています
これが私のコードです:
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("JOBS", "http://www.example.com");
doc.AppendChild(root);
XmlElement job = doc.CreateElement("JOB", "http://www.example.com");
root.AppendChild(job);
XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
job.AppendChild(docInputs);
XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
docInputs.AppendChild(docInput);
XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
docOutputs.AppendChild(docOutput);
現在の出力:
<JOBS xmlns="http://www.example.com">
<JOB>
<JOB:DOCINPUTS xmlns:JOB="http://www.example.com">
<JOB:DOCINPUT />
</JOB:DOCINPUTS>
<JOB:DOCOUTPUTS xmlns:JOB="http://www.example.com">
<JOB:DOCOUTPUT />
</JOB:DOCOUTPUTS>
</JOB>
</JOBS>
ただし、必要な出力は次のとおりです。
<JOBS xmlns:JOBS="http://www.example.com" xmlns:JOB="http://www.example.com">
<JOB>
<JOB:DOCINPUTS>
<JOB:DOCINPUT />
</JOB:DOCINPUTS>
<JOB:DOCOUTPUTS>
<JOB:DOCOUTPUT />
</JOB:DOCOUTPUTS>
</JOB>
</JOBS>
私の質問:複数の名前空間を持つルート要素を含むXmlDocument
を作成するにはどうすればよいですか?
以下は、上記で要求した目的の出力を生成します。
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("JOBS");
root.SetAttribute("xmlns:JOBS", "http://www.example.com");
root.SetAttribute("xmlns:JOB", "http://www.example.com");
doc.AppendChild(root);
XmlElement job = doc.CreateElement("JOB");
XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
docInputs.AppendChild(docInput);
job.AppendChild(docInputs);
XmlElement docOutputs = doc.CreateElement("JOB", "DOCOUTPUTS", "http://www.example.com");
XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
docOutputs.AppendChild(docOutput);
job.AppendChild(docOutputs);
doc.DocumentElement.AppendChild(job);
ただし、例/目的の出力で、2つの異なるプレフィックスに対して同じXML名前空間が使用されているのは奇妙に思えます。お役に立てれば。
要素に名前空間プレフィックス属性を明示的に作成できます。次に、同じ名前空間と同じプレフィックスの両方で作成された子孫要素を追加すると、XmlDocumentは、要素に名前空間宣言を追加する必要がないことを確認します。
この例を実行して、これがどのように機能するかを確認します。
using System;
using System.Xml;
static void Main(string[] args)
{
XmlDocument d = new XmlDocument();
XmlElement e = d.CreateElement("Elm");
d.AppendChild(e);
d.DocumentElement.SetAttribute("xmlns:a", "my_namespace");
e = d.CreateElement("a", "bar", "my_namespace");
d.DocumentElement.AppendChild(e);
e = d.CreateElement("a", "baz", "other_namespace");
d.DocumentElement.AppendChild(e);
e = d.CreateElement("b", "bar", "my_namespace");
d.DocumentElement.AppendChild(e);
d.Save(Console.Out);
Console.ReadLine();
}
名前空間属性をルート要素に追加してみてください。
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("JOBS", "http://www.example.com");
root.SetAttribute("xmlns:JOB", "http://www.example.com");
doc.AppendChild(root);
XmlElement job = doc.CreateElement("JOB", "http://www.example.com");
root.AppendChild(job);
XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
job.AppendChild(docInputs);
XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
docInputs.AppendChild(docInput);
XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
root.AppendChild(docOutput);