2010-08-23 42 views
2

我已经使用了Linq2SQL,并熟悉了大多数概念(直至并包括扩展ObjectContext),但对于Linq2XML,我有点遗失。使用LINQ在VS2010中使用xsd生成XML

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

此前,我使用XMLDocuments和编程方式构建元素 - 我希望我可以得到更优雅的东西。

我已经给出了15余XSD文件的形式复杂的架构 - 这进口的至少一个其他XSD(公用数据类型),并且大部分其中一些进口彼此

所以我已经得到的东西,如:

文件1..1

<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> s到解决路径问题,但现在VS2010显示为0的错误(并没有什么在编辑器中加下划线)

的各种文件1 ... N定义需要的XML打一个网络服务 - 因此没有共同的根(有一个xsd请求类型1,请求类型2等)

我找到了xsd.exe工具来生成类,但如果我指出它在(说)请求类型1的模式,我得到了很多模式验证警告 - 说它找不到常见的数据类型(如它不读取导入语句),并没有产生任何东西。

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

总之,如何从哪里得到我编写类似:

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

要获得XSD.EXE运行,你应该称呼它

xsd.exe schema1.xsd schema2.xsd /c 

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

当你有你的类时,你不使用LINQ2XML,而是使用XmlSerializer将XML文件反序列化到对象中。然后,您使用生成的对象图形使用常规LINQ2Objects。

编辑:由于这似乎并不奏效,最后的手段可能是手动合并XSD文件。

+0

感谢您的回答 - 我看到了Rick Strahl在博客文章中引用的技术,但它仍然会生成相同的错误 - 即它试图单独解析每个文件,而不是一次加载它们。我离开办公室,所以明天再试一次结果。 – Basic 2010-08-23 23:04:54

+0

据我所知,该*应该*工作,但这是一段时间,因为我做了一些xsd的东西。根据http://msdn.microsoft。com/en-us/library/ms950721您也可以尝试wsdl.exe – 2010-08-24 06:01:14

+0

对不起,响应缓慢。这似乎并不奏效 - 它试图分析所有文件,但是单独这样做(即忽略include)。我其实已经走过了不同的路线,并将所有的xsds合并为一个文件。这使我可以使用xsd工具。如果您想更新您的答案以包含该建议,我会标记为正确。如果没有,我会发布我自己的答案 - 但你确实把我的想法放在正确的路线上。 – Basic 2010-08-26 12:36:03