0

有谁知道如何使用 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 对象生成。

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

谢谢

肖恩

4

3 回答 3

1

为什么要在这种情况下使用 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)
        );

在哪里

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

于 2009-01-22T12:43:33.570 回答
0

还有一个 LINQ to XSD,也许这就是你要找的东西!你可以在这里找到

于 2009-01-22T12:49:12.280 回答
0

由于您想使用 LinqToXml,我假设您的情况是您已经有一些 Xml,并且您希望 Xsd 与它一起使用。

LinqToXml 与 Xsd 的关系不大......

您可能想查看Xsd 推理工具。

于 2009-01-22T13:07:03.600 回答