使用LINQ在VS2010中使用xsd生成XML

时间:2010-08-23 12:03:27

标签: xml linq visual-studio-2010 xsd

我使用过Linq2SQL批次并且熟悉大多数概念(包括扩展ObjectContext),但是对于Linq2XML,我有点迷失。

我现在需要生成一些复杂的XML,我想使用简单的LINQ。

以前,我已经使用了XMLDocuments并以编程方式构建了元素 - 我希望我能得到一些更优雅的东西。

我已经获得了15个xsds形式的复杂模式 - 其中大多数导入至少一个其他xsd(常见数据类型),其中一些导入彼此

所以我有类似的东西:

档案1..n

<xsd:schema targetNamespace="http://www.SomeCompany.com"  
    xmlns:SomeCompany="http://www.SomeCompany.com/datatypes_EA"  
    xmlns="http://www.SomeCompany.com" xmlns:dct="http://www.SomeCompany.com/DCTRequestdatatypes"  
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="unqualified">
    <xsd:import namespace="http://www.SomeCompany.com/datatypes_EA"
        schemaLocation="datatypes_EA.xsd" />
        <xsd:import namespace="http://www.SomeCompany.com/DCTRequestdatatypes"
        schemaLocation="DCTRequestdatatypes.xsd" />
    <xsd:element name="DCTRequest">
        <xsd:complexType>
            <blah which references types stored in datatypes_EA.xsd>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

和另一个包含公共数据类型的文件(DataTypes_EA.xsd)。

我不得不调整<import>来修复路径问题,但VS2010现在显示0错误(编辑器中没有任何下划线)

各种文件1 ... n定义了访问Web服务所需的xml - 因此没有公共根(请求类型1有xsd,请求类型2等)

我发现xsd.exe工具生成类但是如果我将它指向(比如)请求类型1的模式,我会收到很多模式验证警告 - 说它找不到常见的数据类型(就像它没有读取import语句一样)并且无法生成任何内容。

理想情况下,我想完全跳过生成课程,但如果需要,我会接受它。

简而言之,我如何从我所在的地方写下以下内容:

Dim Root as new DCTRequest with {.Property = "SomeValue"}
...
Dim ElementsWithSomething = A.SomeElementCollection.Where(function(x) x.PropertyName = "Something")
Dim FinalXML = A.Tostring (or serialize or whatever)

我接近这个错误吗?

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

要使xsd.exe运行,您应该将其称为

xsd.exe schema1.xsd schema2.xsd /c

我想你可以在这里排列所有的模式并同时获得所有类。

当您拥有类时,不使用LINQ2XML,而是使用XmlSerializer将XML文件反序列化为对象。然后使用常规的LINQ2Object与生成的对象图。

编辑:由于这似乎不起作用,最后一种方法是手动合并XSD文件。