c# - 使用 xsd.exe 创建包含模式的类对象

标签 c# xml xsd xsd.exe

我收到了 XSD 架构 MainSchema.XSD 和 Common.Xsd 架构。

在 MainSchema.xsd 中有一行:

<xs:include schemaLocation="Common.xsd"/>

Common.Xsd 包含各种数据类型的定义,例如:

<xs:simpleType name="SSN">
    <xs:annotation>
        <xs:documentation>Social security number is 10 digits</xs:documentation>
        <xs:appinfo>
            <altova:exampleValues>
                <altova:example value="5412983209"/>
                <altova:example value=""/>
            </altova:exampleValues>
        </xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
        <xs:whiteSpace value="collapse"/>
        <xs:pattern value="([0-9]{10})?"/>
    </xs:restriction>
</xs:simpleType>

在 MainSchema 中,我有一个名为 SSNField 的 SSN 类型的属性:

<xs:attribute name="CompanySSN" type="SSN">
    <xs:annotation>
        <xs:documentation>SSN number of Company</xs:documentation>
    </xs:annotation>
</xs:attribute>

当我使用此命令创建 C# 对象类时:

xsd.exe -c -l:c# MainSchema.xsd Common.Xsd

然后它创建了一个名为:

MainSchema_Common.cs

当我根据这个模式验证一个对象时,它出现了一个异常:

{“类型‘http://schemas.domain.com:SSN’未声明,或者不是简单类型。”

有人知道我做错了什么吗?

请记住,我从外部来源收到了此 XSD 架构,并被告知此文件中没有错误。

真诚的 啊

最佳答案

您需要解释您是如何验证的。我假设您正在创建该类的一个实例,然后序列化为 XML,而 xml 未验证?

您需要注意,仅仅因为您的 xml 是序列化使用 xsd.exe 派生的类型的产物并不自动意味着 xml 将符合架构。

您可能需要通过为根命名空间或文档中的其他节点注入(inject)覆盖来启动 XmlSerializer。

例如在某个节点注入(inject)命名空间:

XmlAttributeOverrides overrides = new XmlAttributeOverrides();

var elementAttribute = new XmlElementAttribute(typeof(SSN))
{
    ElementName = "SSN", 
    Namespace = "http://schemas.domain.com:SSN"
};

var newAttribute = new XmlAttributes();
newAttribute.XmlElements.Add(elementAttribute);
overrides.Add(typeof(ParentNodeType), "SSN", newAttribute);

调用序列化器:

XmlSerializer serializer = new XmlSerializer(typeof(MyType), overrides); 

希望对你有帮助

关于c# - 使用 xsd.exe 创建包含模式的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122425/

相关文章:

java、xsd 和编码 : jre bug, 我的错还是 xsd 问题?

java - 如何使用 JAXB (Intellij Idea) 从多个 xsd 生成 Java 类

c# - 如何使用 C# 在 .NET 中获取当前用户名?

c# - 如何在 C# 中创建对象的 Array 或 ArrayList?

c# - 使用 Entity Framework 的一对一关系中的主键错误

sql-server - 如何从 XSD 架构构建数据库并导入 XML 数据

xml - XSD 中的条件必需元素

c# - 如何使用 C# 扩展方法扩展类?

java - 通过 lambda java8 转换 xml 字符串

xml - 获取具有 "name"属性的 XML 元素的标记名称