Linq To Xml, deux fois le même Namespace dans une seule balise [Résolu]

Whismeril 12126 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 12 mars 2014 à 15:15 - Dernière réponse : Whismeril 12126 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Whismeril 12126 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - Modifié par Whismeril le 11/08/2014 à 23:43
2
Merci
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.

Merci Whismeril 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.