我使用过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)
我接近这个错误吗?
提前感谢您提供任何帮助
答案 0 :(得分:1)
要使xsd.exe运行,您应该将其称为
xsd.exe schema1.xsd schema2.xsd /c
我想你可以在这里排列所有的模式并同时获得所有类。
当您拥有类时,不使用LINQ2XML,而是使用XmlSerializer将XML文件反序列化为对象。然后使用常规的LINQ2Object与生成的对象图。
编辑:由于这似乎不起作用,最后一种方法是手动合并XSD文件。