使用xsi:schemaLocation命名空间创建XDocument

Rob*_*Day 18 c# xml linq-to-xml xnamespace

我需要创建以下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>
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的那种代码,但是,我无法在名称中创建带冒号的属性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"))
    )
);
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 45

这是因为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)
            )
        );
Run Code Online (Sandbox Code Playgroud)

编辑:更新了我用来解决问题的最终代码.感谢詹姆斯的原始答案.