2

当我使用 XML 示例文件生成 XSD 时,同时使用 Visual Studio 和 Oxygen,它会使用 ton of 生成一个文件<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,它会将每个“元素”标签视为可用架构,因为它们都位于根级别 - 标题以及每个子元素。我只想让一个模式可用——在这种情况下是标题——并隐藏其余的。

显而易见的解决方案似乎是手动编辑我的文件,使其看起来像这样,手动删除 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 的情况下生成文件,而只是将元素的副本放在它应该在的位置而不是根级别?

4

3 回答 3

3

如果您有 Visual Studio BizTalk 项目,您可以选择“添加生成的项目..”,然后选择“生成架构”。

在下拉列表中选择“格式良好的 xml”,如果在您必须运行脚本激活它之前没有人使用该选项,请参见下面的链接。

VS 现在将生成你想要的那种模式。如果 VS 猜错了,您将不得不调整数据类型 :)

查看此人的示例添加生成的架构

于 2009-03-24T19:41:28.403 回答
0

我怀疑编写一个为您执行此转换的 XSLT 会相对容易。您可以检测 ref 属性并使用 XPath 中的值来查找真正的定义,然后将其复制到输出。应该不难写。

于 2009-03-24T16:40:15.813 回答
0

你用的是哪个版本的VS?我在 Visual Studio 2008 中尝试了您的示例,它以您似乎想要的方式生成了 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="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>
</xs:schema>

看起来VS 2005会做同样的事情。

我查看了 VS 选项对话框,但没有看到任何可以控制如何生成 XSD 的内容。(也许某处有配置文件?)

于 2009-03-24T18:26:41.640 回答