Создание XDocument с пространством имен xsi: schemaLocation - PullRequest
17 голосов
/ 30 ноября 2011

Мне нужно создать следующий XML, и я пытаюсь сделать это с помощью XDocument. Однако у меня возникают проблемы при указании пространств имен.

<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>

Это тот код, который я ищу, однако я не могу создать атрибуты с двоеточием в имени для 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"))
    )
);

1 Ответ

43 голосов
/ 30 ноября 2011

Это потому, что xsi само по себе является пространством имен.Вам нужно будет сделать что-то вроде:

        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)
            )
        );

РЕДАКТИРОВАТЬ: Обновлено с окончательным кодом, который я использовал для решения проблемы.Благодаря оригинальному ответу Джеймса.

...