デフォルトの名前空間と名前空間を含むXMLドキュメントを作成するのに問題があり、作成しようとしているものを簡単に説明するのは難しいです...
<Root xmlns="http://www.adventure-works.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://www.SomeLocatation.Com/MySchemaDoc.xsd">
<Book title="Enders Game" author="Orson Scott Card" />
<Book title="I Robot" author="Isaac Asimov" />
</Root>
しかし、私が最終的にするのはこれです...
<Root xmlns="http://www.adventure-works.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://www.SomeLocatation.Com/MySchemaDoc.xsd">
<Book p3:title="Enders Game" p3:author="Orson Scott Card" xmlns:p3="http://www.adventure-works.com" />
<Book p3:title="I Robot" p3:author="Isaac Asimov" xmlns:p3="http://www.adventure-works.com" />
</Root>
このXMLスニペットを生成するために私が書いたコードはこれです...
XNamespace aw = "http://www.adventure-works.com";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
new XAttribute(xsi + "SchemaLocation", "http://www.SomeLocatation.Com/MySchemaDoc.xsd"),
new XElement(aw + "Book",
new XAttribute(aw + "title", "Enders Game"),
new XAttribute(aw + "author", "Orson Scott Card")),
new XElement(aw + "Book",
new XAttribute(aw + "title", "I Robot"),
new XAttribute(aw + "author", "Isaac Asimov")));
MSDNの例に基づく
****編集****
さて、もう少し実験を重ねると、XML名前空間がどのように機能するかについて非常に混乱しています。
aw +属性を削除すると、私が求めていたものが得られます...しかし、今、私が求めていたものは、実際には私が期待したものではないようです。名前空間は親から継承されていると思いましたが、これは属性にも当てはまりませんか?なぜなら、属性を読み取るこのコードは、期待どおりに機能しないからです...
XElement xe = XElement.Parse(textBox1.Text);
XNamespace aw = "http://www.adventure-works.com";
var qry = from x in xe.Descendants(aw + "Book")
select (string)x.Attribute(aw + "author");
ただし、属性のaw +を削除すると、そのokになり、デフォルトの名前空間に属性を含めることができないと思い込ませます。これは正しいです?