Question

Je dois créer le code XML suivant et je suis en train de le faire en utilisant XDocument. Cependant, je vais avoir des difficultés pour spécifier les espaces de noms.

<AssessmentOrderRequest
    xsi:schemaLocation="http://ns.hr-xml.org/2007-04-15 http://ns.hr-xml.org/2_5/HR-XML-2_5/StandAlone/AssessmentOrderRequest.xsd"
    xmlns="http://ns.hr-xml.org/2007-04-15"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</AssessmentOrderRequest>

Ceci est le genre de code que je suis à la recherche, mais je ne peux pas créer des attributs avec deux points au nom du xsi:schemaLocation.

return new XDocument(
    new XElement("AssessmentOrderRequest",
        new XAttribute("xsi:schemaLocation", XNamespace.Get("http://ns.hr-xml.org/2007-04-15 http://ns.hr-xml.org/2_5/HR-XML-2_5/StandAlone/AssessmentOrderRequest.xsd")),
        new XAttribute("xmlns", XNamespace.Get("http://ns.hr-xml.org/2007-04-15")),
        new XAttribute(XNamespace.Xmlns + "xsi", XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"))
    )
);
Était-ce utile?

La solution

En effet, le xsi est un espace de noms en lui-même. Vous devez faire quelque chose comme:

        XNamespace xmlns = XNamespace.Get("http://ns.hr-xml.org/2007-04-15");
        XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
        XNamespace schemaLocation = XNamespace.Get("http://ns.hr-xml.org/2007-04-15 http://ns.hr-xml.org/2_5/HR-XML-2_5/StandAlone/AssessmentOrderRequest.xsd");

        return new XDocument(
            new XElement(xmlns + "AssessmentOrderRequest",
                new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                new XAttribute(xsi + "schemaLocation", schemaLocation)
            )
        );

EDIT: Mise à jour avec le code final j'ai utilisé pour résoudre le problème. Avec grâce à la réponse originale de James.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top