Linq To XSD在运行时

时间:2009-06-30 13:30:58

标签: c# linq xsd linq-to-xml

我正在尝试在运行时获取某个XSD(元素)的.NET对象表示。

如何在运行时使用Linq到XSD而不是设计时间?

谢谢, --Ran。

1 个答案:

答案 0 :(得分:1)

我在几个项目中使用它。

您必须手动编辑项目文件将其添加为目标。我同意一些信息很少的评论。

首先,您必须在项目参考中引用dll

第二,你必须'卸载'项目(右键单击项目文件)

然后编辑项目文件(再次右键单击)

将以下内容添加到项目文件xml

</PropertyGroup> // End of other property groups
<PropertyGroup>
    <TXLINQBinDir Condition="'$(TXLINQBinDir)' == ''">$(ProgramFiles)\LINQ to XSD Preview\Bin</TXLINQBinDir>
</PropertyGroup>
<ItemGroup>
    <Reference Include="Microsoft.Xml.Schema.Linq, Version=0.10.1000.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\Program Files\LINQ to XSD Preview\Bin\Microsoft.Xml.Schema.Linq.DLL</HintPath>
    </Reference>
<Reference Include="XOTask, Version=0.10.1000.0, Culture=neutral, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\..\..\Program Files\LINQ to XSD Preview\Bin\XOTask.dll</HintPath>
</Reference>
<Reference> // Other references 

<ItemGroup>
// Other item groups
</ItemGroup>
<ItemGroup>
    <LinqToXsdSchema Include="Schema\YourSchema.xsd" />
</ItemGroup>

<Import Project="$(TXLINQBinDir)\LinqToXsd.targets" />

您可以用$(ProgramFiles)引用替换.... \ nonsense但我还没有测试过它。如果你转到xsd文件的属性,也可以省略ItemGroup部分,其中一个构建操作应该是“LinqToXsdSchema”(仅在设置了LinqToXsd.targets之后)

现在,您可以使用解析方法

将xsd文件用作完全填充的对象

我的Xsd根元素是

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="AlertData">
      </xs:element>

所以在代码中我可以像这样访问它

// Parse the xml doc as my LinqToXsd object    
AlertData XmlSource = AlertData.Parse(xmlSource.ToString());

// Start accessing xelements
XmlSource.waalert.waa_alert