代码之家  ›  专栏  ›  技术社区  ›  Wolfgang Jacques

如何将xsi:noNamespaceSchemaLocation添加到序列化程序

  •  0
  • Wolfgang Jacques  · 技术社区  · 8 年前

    我构建了一个需要根据xsd文件进行验证的XML文档。因此,我需要在xml的根元素中引用xsd文件。到目前为止,我使用以下C代码:

    var ser = new XmlSerializer(typeof(myspecialtype));
    XmlSerializerNamespaces MainNamespace = new XmlSerializerNamespaces();
    MainNamespace.Add("xlink", "http://www.w3.org/1999/xlink");
    MainNamespace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    using (XmlWriter w = XmlWriter.Create(@"C:\myxmlfile.xml"))
    {
        w.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"utils/somexsl.xsl\"");
        ser.Serialize(w, LeBigObject, HauptNs);
    }
    

    生成的Xml如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="utils/somexsl.xsl"?>
    <caddy-xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlVersion="03.07.00">
    

    但我需要这个:

    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="utils/somexsl.xsl"?>
    <caddy-xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlVersion="03.07.00" xsi:noNamespaceSchemaLocation="utils/theveryimportant.xsd">
    

    我在这里遇到了“CreateAttribute”: Add Namespace to an xml root node c# 但我无法将其与序列化程序结合在一起。非常感谢。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Wolfgang Jacques    8 年前

    我在这里被指出了解决方案: https://social.msdn.microsoft.com/Forums/en-US/e43585c6-181b-4449-8806-b07f82681a2a/how-to-include-xsinonamespaceschemalocation-in-the-xml?forum=asmxandxml

    我在课堂上添加了以下内容:

    [XmlAttribute("noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)]
        public string attr = "utils/theveryimportant.xsd";
    

    这是可行的。