当我使用 XML 示例文件生成 XSD 时,使用 Visual Studio 和 Oxygen,它会使用大量 <xs:element ref="ELEMENTNAME" />
生成一个文件。 ,其中 elementname 是实际的元素名称。在文件的后面,它有一个元素 <xs:element name="ELEMENTNAME" type="xs:string" />
它定义了该元素是什么。例如,以下是摘录:
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element ref="VersionNumber" />
<xs:element ref="BillerGroupID" />
<xs:element ref="BillerGroupShortName" />
<xs:element ref="BillerID" />
<xs:element ref="BillerShortName" />
<xs:element ref="FileIndicator" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="VersionNumber" type="xs:string" />
<xs:element name="BillerGroupID" type="xs:string" />
<xs:element name="BillerGroupShortName" type="xs:string" />
<xs:element name="BillerID" type="xs:string" />
<xs:element name="BillerShortName" type="xs:string" />
<xs:element name="FileIndicator" type="xs:string" />
问题是 - 我正在使用 Microsoft Biztalk,它将每个“元素”标记视为可用架构,因为它们都位于根级别 - header 以及每个子元素。我只想使一个模式可用 - 在本例中为 header - 并隐藏其余部分。
显而易见的解决方案似乎是手动编辑我的文件,使其看起来像这样,手动删除 REF 语句:
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element name="VersionNumber" type="xs:string" />
<xs:element name="BillerGroupID" type="xs:string" />
<xs:element name="BillerGroupShortName" type="xs:string" />
<xs:element name="BillerID" type="xs:string" />
<xs:element name="BillerShortName" type="xs:string" />
<xs:element name="FileIndicator" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
但是,由于我的文件很大并且包含数千个元素,因此这实际上并不可行。有没有办法告诉我的工具在不使用 REF 的情况下生成文件,而只是将元素的副本放置在应该放置的位置而不是根级别?
最佳答案
如果您有 Visual Studio BizTalk 项目,您可以选择“添加生成的项目..”,然后选择“生成架构”。
在下拉列表中选择“格式良好的 xml”,如果在您必须运行脚本来激活它之前没有人使用该选项,请参阅下面的链接。
VS 现在将生成您想要的模式类型。如果 VS 猜错了,你将不得不调整数据类型:)
查看此人的样本 Add generated schemas
关于xml - 生成不带 REF 元素的 XSD 文件 - 我只想要一个 "literal"XSD 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/678202/