代码之家  ›  专栏  ›  技术社区  ›  Basic

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

  •  2
  • Basic  · 技术社区  · 15 年前

    我已经使用了很多Linq2SQL,并且熟悉大多数概念(包括扩展ObjectContext),但是对于Linq2XML,我有点迷茫。

    以前,我使用过XMLDocuments和编程构建的元素——我希望我能得到一些更优雅的东西。

    我得到了一个复杂的模式,形式是15多个xsd,其中大多数xsd至少导入一个其他xsd(公共数据类型),有些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>
    

    我得调整一下房间 <import> s修复路径问题,但VS2010现在显示0个错误(编辑器中没有下划线)

    各种文件1…n定义了访问web服务所需的xml—因此没有公共根(请求类型1、请求类型2等都有一个xsd)

    我找到了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 回复  |  直到 14 年前
        1
  •  1
  •   Albin Sunnanbo    15 年前

    得到xsd.exe文件你应该这样说

    xsd.exe schema1.xsd schema2.xsd /c
    

    我想您可以在这里排列所有模式,同时生成所有类。

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

    编辑: