none
C#: Linq To Xml, deux fois le même Namespace dans une seule balise RRS feed

  • Question

  • 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

    jeudi 20 mars 2014 09:44

Réponses

Toutes les réponses