代码之家  ›  专栏  ›  技术社区  ›  Sean Kearon

使用LinqToXML生成XSD

  •  0
  • Sean Kearon  · 技术社区  · 16 年前

    有人知道如何使用LinqToXML生成XSD吗?我在任何地方都找不到这样的例子。XSD具有以下相当低的复杂性:

    <?xml version="1.0" encoding="utf-8" ?>
    <!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
    <xs:schema 
        elementFormDefault="qualified" 
        targetNamespace="http://schemas.xxx.yy/CRM/2009/01/DeadAnimalReport" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
        <xs:element name="Name">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:length value="35" />
            </xs:restriction>
        </xs:simpleType>
        </xs:element>
    
        <xs:element name="Email" type="xs:string" />
    
        <xs:element name="Selection">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:length value="15" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    
        <xs:element name="DeliveryDate" type="xs:date" />
    </xs:schema>
    

    工具的上下文结构允许业务分析师生成消息模式以及一些超出问题范围的相关人工制品。工具xsd将从应用程序的对象模型中的clr对象生成。

    对象非常简单——根对象包含足够的信息来构造名称空间以及表示元素(类型、名称等)的其他对象集合。

    谢谢

    肖恩

    3 回复  |  直到 13 年前
        1
  •  1
  •   aku    16 年前

    为什么要在这个场景中使用LINQ?源数据的外观如何?

    提供的信息不多,但无论如何:

    您可以使用类似的代码构造XSD:

    XNamespace nsXS = "http://www.w3.org/2001/XMLSchema";
    XElement root = new XElement(nsXS + "schema",
        new XAttribute("elementFormDefault", "qualified"),
        new XAttribute("targetNamespace", "http://schemas.xxx.yy/CRM/2009/01/DeadAnimalReport"),
        new XElement(nsXS + "element",
            new XElement(nsXS + "simpleType",
                new XElement(nsXS + "restriction",
                    new XAttribute("base", "xs:string")),
                    new XElement(nsXS + "length", new XAttribute("value", 35)))));
    

    如果有某种对象,则可以使用投影:

    var q =
        new XElement(nsXS + "schema",
                     from s in someObjects
                     select GetXsdDefinition(s)
            );
    

    哪里

    GetXsdefinition是一种将对象作为参数并返回其XSD定义的方法。

        2
  •  0
  •   Amy B    16 年前

    既然您想使用LinqToXML,我假设您的场景是已经有了一些XML,并且您希望有一个XSD来支持它。

    Linqtoxml与XSD没有太多关系…

    你可能想看看 Xsd Inference 工具。

        3
  •  0
  •   Tim Cooper    13 年前

    还有一个linq-to-xsd,也许这就是你要找的! 你可以找到它 HERE