C# 创建XSD模式

C# 创建XSD模式,c#,xml,xsd,xsd.exe,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="cdf

我有一个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,这里我指的是特定属性字段的顺序) 所以我有,行元素的未知数量和行元素中字段属性的未知数量


谢谢

如果您自己对编写XSD感到不舒服,请使用类似的生成器

编辑:根据评论中的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>

如果您使用的是Visual Studio 2008:

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

编辑
请尝试获取有关设置minOccurs(在元素上)或required(在属性上)的详细信息,以便可以操作派生模式。

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

嗯。很抱歉,此要求已用完XML架构的功能:-[

架构中不能有未声明的属性。如果属性出现在xml中,则需要有相应的定义。有一个名为的东西再次需要定义[在另一个链接架构的某个地方]

1) 定义所有可能的属性使得
use=“optional”
,看起来实际上是不可能的。而且您的上一个需求也被跳过了。
2) 如果可能的话,将所有属性转换为元素[使用转换,或者你可以要求发送者这样做,我不知道这在你的情况下有多复杂],然后定义元素
,这听起来有点舒服。但是你的要求[至少必须出现一个属性]仍然没有实现

这就是我可以为您添加的内容。如果您可以更改需求或输入xml结构,请让我知道,我会看看,我是否可以在其他方面帮助您

问候,

Baby pro

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


无论如何,感谢大家

我曾尝试使用一些生成器,但它们生成了带有标志“可选”的属性。在我的情况下,我不知道标签中可以包含多少属性fieldi如果不知道元素在XML中出现多少次,可以将“fieldi”元素的maxOccurs属性设置为“unbounded”这意味着“fieldi”的出现次数可能会尽可能多元素。不可能为属性设置maxOccurs,只能为元素设置maxOccurs。好的,让我们直截了当地说。在您的问题中添加一些示例xml,我们将为它找到一个XSD。示例:我尝试过,但收到一个带有“可选”的模式属性,这不是我需要的,因为我不知道我需要多少属性have@Nikolai-我已经扩展了我的答案。嗨,现在有可能更改元素的属性,因为这不是我的xml,我从服务器收到它…无论如何,谢谢