【问题标题】:How do I use XML Schema Definition Tool (Xsd.exe)如何使用 XML 架构定义工具 (Xsd.exe)
【发布时间】:2011-02-11 18:59:42
【问题描述】:

说真的,我很困惑。我有一个由类制成的 .XSD,以便我可以传递给 Web 服务。它把它作为一个 XMLSchema 对象传递给 web 服务,现在我需要将它变成一个类,以便我可以在 web 服务端用它制作对象。我知道 XSD.exe 是答案,但如果我能确切地弄清楚如何实现这个东西,我会被诅咒的。我需要它在运行时进行这种转换,所以我需要将它的代码放入我的项目中,并且我看到的所有使用 XSD.exe 的参考都谈到从命令行调用它。我的 .XSD 在下面。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Field">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name" type="xs:string" />
        <xs:element name="Type" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

在我的项目中,它存在于一个 XMLSchema 对象中。如何把它变成一个类?

-非常感谢您提供的任何帮助。

【问题讨论】:

    标签: xml vb.net xsd xsd.exe


    【解决方案1】:

    如果您在 .NET 中进行 Web 服务,则无需摆弄 XSD。

    如果您使用来自 .NET 的第一代 Web 服务堆栈,即 .ASMX Web 服务,则有一个 wsdl.exe 工具。如果您依赖 WCF,可以使用 svcutil.exe 工具。

    这些东西会生成客户端代理代码,这些代码提供允许 Web 服务客户端调用 Web 服务的类。它们隐含地依赖于 XSD,但您不需要直接使用 xsd.exe 工具,也不需要直接处理 .xsd 文件。

    【讨论】:

    • 但这如何与我创建的自定义类一起工作。例如,我有一个使用 Select 语句执行动态 LINQ 查询的 web 服务。因为返回对象的模式与请求的模式不同(因为它有不同的列数),所以它不能序列化。我的想法是在客户端动态构建一个自定义类,由他们在查询中请求的字段确定,并将该类与请求一起发送到动态 LINQ Web 服务,以便在返回数据时它可以序列化进入我在客户端创建的架构。
    • 提供具有灵活架构的 XML 数据的方法很多。一方面是 XML 文档/XML 元素方法,其中服务可以返回任何格式正确的 XML。另一端是为所有数据项使用固定的、固定的 XSD 定义模式的方法。为了平衡这两个极端,您可以通过&lt;xsd:any&gt; 指定可选元素或通配符。这依赖于 XML 的可扩展性(X 部分)。我建议您研究 WSDL 优先的设计方法,并在继续在客户端上动态生成类之前三思而后行。
    • 您有什么好的参考资料可以帮助您了解更多相关信息。当我在一个工作项目上工作时,我一边打字一边学习。其最终结果是允许用户从这些表中选择表和字段,以及输入“Where”子句并将其发送到 Web 服务以执行动态 LINQ 查询并将数据返回给他们的客户端。整个网络服务的序列化真的让我很生气,我很难找到一个好的可靠来源来学习。
    • 您知道,您描述的越多,我认为您越应该使用 XElement(广泛开放)格式。 LINQ 查询的结果当然可以是任何东西。任何形状,任何模式,完全动态。为此,您应该从 Web 服务返回 XElement。见stackoverflow.com/questions/1904477/…
    【解决方案2】:

    如果您使用的是 .NET 2.0,则只需使用“添加 Web 引用”并指向服务的 WSDL 文件。如果您使用任何更高版本,请使用“添加服务参考”。

    这两者都将创建您需要与服务通信的类,而无需使用 XSD.EXE 甚至 WSDL.EXE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2020-06-19
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多