创建XSD架构

时间:2010-03-10 10:56:21

标签: c# xml xsd xsd.exe

我有一个xml标签:

<ROW field1="value 1"  field2="value 2" ...  />

fieldi有一个字符串值,属性数fieldi是可变的,但不小于1.是否可以为此标记创建xsd架构?

可能的xml文档

<ROWDATA>
  <ROW field1="dfgdf" field2="ddfg"></ROW>
  <ROW field1="dfedf" field2="djkfg" field3="cdffd"></ROW>
  <ROW field1="dfedf" field2="djkfg" field3="cdffd" field4="dfedf" field5="djkfg" field6="cdffd"></ROW>
</ROWDATA> 
我从Web服务器收到的这个xml文档中的

可以是一个可变数量的属性字段(我把它们称为fieldi,其中i表示特定属性字段的顺序) 所以我在ROW元素中有未知数量的ROW元素和未知数量的字段属性

由于

4 个答案:

答案 0 :(得分:2)

如果您使用的是Visual Studio 2008:

  • 在Visual Studio中打开您的Xml文件
  • 转到屏幕顶部的“Xml”菜单选项
  • 选择“创建架构”

这将生成您的xsd架构

修改 请尝试this example以获取有关设置minOccurs(在元素上)或必需(在属性上)的详细信息,以便您可以操作派生模式。

答案 1 :(得分:0)

如果您不习惯自己编写XSD,请使用this之类的生成器。

编辑:根据您在评论中的XML,我可以想到以下XSD的结构

<xsd:element name="FieldHeader">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element name="Fields" type="xsd:string"/> <!--use minOccurs  maxOccurs here-->
          </xsd:sequence>
     </xsd:complexType>
 </xsd:element>
<xsd:simpleType name="fieldi">  
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="Fields"> 
    <xsd:list itemType="fieldi" />
</xsd:simpleType>

答案 2 :(得分:0)

我想我已理解你的要求了。为了避免误解,让我揭示一下我所理解的内容:
“你有一个xml文件,其中包含一个名为fieldi的元素,带有一些未知属性。这意味着你不知道[或者说不想要]这些属性的名称和值。只是想看看,至少有一个属性出现“,

好。不好意思,这个要求已经没有了XML模式的功能。 : - [

您不能在架构中使用未声明的属性。如果它出现在xml中,则需要对其进行适当的定义。有一种叫做<anyAttribute/> [click-here]的东西,它需要定义[某处,在另一个链接的模式中]。

1)定义制作use="optional"的所有可能属性,看起来几乎不可能。而且你的最后一个要求也被忽略了 2)如果可能的话,将所有属性转换为元素[使用转换,或者你可以要求发送者这样做,我不知道你的情况有多复杂],并定义元素{{1} ,听起来有点舒服。但是你的要求[至少必须出现一个属性]仍未实现。

所以这就是我可以为你加分的。如果您可以更改要求或输入xml结构,请告诉我,我会看到,我是否可以通过任何其他方式为您提供帮助..

问候,
婴儿亲

答案 3 :(得分:0)

我解决了这个问题,但以其他方式,通过以我需要的方式控制xml文档的反序列化。但是,我不喜欢这个解决方案,因为我想从xsd方案创建类并在我的代码中使用它们。

无论如何,感谢大家