Je ne parviens pas à créer un document XML qui contient un espace de noms par défaut et un espace de noms nommé, difficile à expliquer plus facile de montrer exactement ce que je suis en train de produire ...XElement espace de noms par défaut des attributs fournit un comportement inattendu
<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>
mais ce que je finis avec ... est-ce
<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>
Le code que j'ai écrit pour produire cet extrait XML est ce ...
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")));
basé sur une example on MSDN
**** **** EDIT
Ok, avec un peu plus d'expériences que je suis très confus sur la façon dont XML les espaces de noms ....
si je enlever l'aw + theattribute je reçois ce que j'étais après ... mais maintenant il semble que ce que j'étais après n'est pas vraiment ce que je m'attendais. Je pensais que les espaces de noms étaient hérités de leurs parents, n'est-ce pas aussi vrai pour les attributs? parce que, ce code pour lire les attributs ne fonctionne pas comme je m'y attendais ...
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");
Cependant, si je retire la aw + sur l'attribut its ok, me conduit à supposer que je ne peux pas avoir des attributs dans l'espace de noms par défaut . Est-ce correct?
très intéressant en effet. Les espaces de noms XML ne sont pas amusants ;-) –
D'accord, bien que LINQ to XML les rende plus agréables à utiliser que tout autre framework que j'ai vu. –