Linq To Xml, deux fois le même Namespace dans une seule balise

Résolu
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 12 mars 2014 à 15:15
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 21 mars 2014 à 10:10
Bonjour,

je cherche à ecrire un xml au format Excel 2003 avec Linq To Xml, FrameWork 3.5.

le début du fichier doit être
<?xml version="1.0" encoding="utf-16"?>
<?mso-application progid='Excel.Sheet'?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet">


Dans la balise workbook il y a deux fois le Namespace urn:schemas-microsoft-com:office:spreadsheet, sans alias (xmlns=) et avec (xmlns:s).

Je n'arriave pas à le faire avec Linq to xml.


Ce code
            XNamespace s = "urn:schemas-microsoft-com:office:spreadsheet";
            XNamespace x = "urn:schemas-microsoft-com:office:excel";

            XDocument xDoc = new XDocument(
                new XProcessingInstruction("mso-application", "progid='Excel.Sheet'"),
                            new XElement(s+"Workbook",
                                new XElement("Toto", "Toto")));//juste pour avoir quelque chose dans la balise

            xDoc.Save("test.xml");

génère la balise sans alias
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid='Excel.Sheet'?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet">
  <Toto xmlns="">Toto</Toto>
</Workbook>



Celui-ci
            XNamespace s = "urn:schemas-microsoft-com:office:spreadsheet";
            XNamespace x = "urn:schemas-microsoft-com:office:excel";

            XDocument xDoc = new XDocument(
                new XProcessingInstruction("mso-application", "progid='Excel.Sheet'"),
                            new XElement(s+"Workbook", new XAttribute(XNamespace.Xmlns + "x","urn:schemas-microsoft-com:office:excel") ,new XAttribute(XNamespace.Xmlns + "s", "urn:schemas-microsoft-com:office:spreadsheet"),
                                new XElement("Toto", "Toto")));//juste pour aoir quelque chose dans la balise

            xDoc.Save("test.xml");

ecrit le xml, avec les deux alias et "s": devant workbook:
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid='Excel.Sheet'?>
<s:Workbook xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet">
  <Toto>Toto</Toto>
</s:Workbook>


Et ceux-là beuguent ou ne compilent pas.
                            new XElement("Workbook",new XAttribute(XNamespace.Xmlns, "urn:schemas-microsoft-com:office:spreadsheet"), new XAttribute(XNamespace.Xmlns + "x","urn:schemas-microsoft-com:office:excel") ,new XAttribute(XNamespace.Xmlns + "s", "urn:schemas-microsoft-com:office:spreadsheet")//ne compile pas 

                            new XElement("Workbook",new XAttribute(XNamespace.Xmlns + "", "urn:schemas-microsoft-com:office:spreadsheet"), new XAttribute(XNamespace.Xmlns + "x","urn:schemas-microsoft-com:office:excel") ,new XAttribute(XNamespace.Xmlns + "s", "urn:schemas-microsoft-com:office:spreadsheet")//erreur le nom ne peut pas être null

                            new XElement("Workbook",new XAttribute("xmlns", "urn:schemas-microsoft-com:office:spreadsheet"), new XAttribute(XNamespace.Xmlns + "x","urn:schemas-microsoft-com:office:excel") ,new XAttribute(XNamespace.Xmlns + "s", "urn:schemas-microsoft-com:office:spreadsheet"),
//erreur Le préfixe '' ne peut pas être redéfini à partir de '' vers 'urn:schemas-microsoft-com:office:spreadsheet' au sein de la même balise d'élément de début.



Merci d'avance pour vos suggestions

1 réponse

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié par Whismeril le 11/08/2014 à 23:43
Sujet résolu ici.

Une fois le document généré, on affecte partout le namesapce par défaut grace à cette methode d'extension



Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
2
Rejoignez-nous