C#自动在类型名称中包含名称空间(xs :)( - > invalid xsd)

时间:2013-06-06 14:39:42

标签: c# xml xsd schema

我正在用C#创建一个Xsd文件。哪个效果很好。 在Xml架构中,我定义了自己的简单类型,但发生了以下情况:

预期:

<xs:element name="name2" type="str32" />

实际值:

<xs:element name="name2" type="xs:str32" />

正如您所看到的,它包含'xs:',其中我定义了类型。当我删除xs:那么Xsd是有效的。

这是我的简单类型定义:

<xs:simpleType name="str32">
  <xs:restriction base="xs:string">
    <xs:maxLength value="32" />
  </xs:restriction>
</xs:simpleType>

最后但并非最不重要的是C#代码:

http://www.mediafire.com/download/fud0xown8nzauyx/DbToXsdConverter.cs

总之:我想删除类型名称前面的xs:但它会自动添加。我不想在任何地方删除命名空间,只是在这个类型名称中。

编辑: 下面是将Xml Schema写入文件的代码:

public class XsdWriter
{
    public static void saveFile(String file, XmlSchema schema)
    {
    using (XmlTextWriter writer = CreateWriter(file))
    {
        XmlNamespaceManager namespaceManager = CreateNamespaceManager();

        schema.Write(writer, namespaceManager);
    }

    //TODO
    String tempFile = "temp_" + file;

    File.Delete(tempFile);
    File.Move(file, tempFile);

    using (StreamReader reader = new StreamReader(tempFile))
    {
        using(StreamWriter writer = new StreamWriter(file))
        {
            String line = "";

            while((line = reader.ReadLine()) != null)
            {
                line = line.Replace("type=\"xs:str", "type=\"str");

                writer.WriteLine(line);
            }
        }
    }

    File.Delete(tempFile);
}

private static XmlTextWriter CreateWriter(String file)
{
    XmlTextWriter writer = new XmlTextWriter(file, new UTF8Encoding());
    writer.Formatting = Formatting.Indented;

    return writer;
}

private static XmlNamespaceManager CreateNamespaceManager()
{
    XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NameTable());

    namespaceManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");

    return namespaceManager;
}

}

编辑:已解决,我需要在使用简单的自定义类型时从XmlQualifiedName中删除命名空间。

1 个答案:

答案 0 :(得分:0)

已解决,我需要在使用简单的自定义类型时从XmlQualifiedName中删除命名空间。