2

我有一个 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,其中我表示特定属性字段的顺序)所以我有,未知数量的 ROW 元素和未知ROW 元素中的字段属性数

谢谢

4

4 回答 4

2

如果您使用的是 Visual Studio 2008:

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

这将生成您的 xsd 架构

编辑 试试这个例子,了解关于设置 minOccurs (在元素上)或 required (在属性上)的详细信息,这样你就可以操纵你的派生模式。

于 2010-03-10T11:05:22.213 回答
0

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

出色地。很抱歉,这个要求已经没有 XML 模式的能力了。:-[

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

1)定义所有可能的属性use="optional",看起来实际上是不可能的。而且你的最后一个要求也被跳过了。
2)如果可能的话,将所有属性转换为元素[使用转换,或者您可以要求发件人这样做,我不知道在您的情况下它有多复杂],并定义 element <any/>,这听起来有些舒服的。但是您的要求[至少必须出现一个属性]仍未达到。

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

问候,
婴儿亲

于 2010-03-11T10:42:35.707 回答
0

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

总之谢谢大家

于 2010-03-12T02:46:24.113 回答
0

如果您对自己编写 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>
于 2010-03-10T10:59:57.467 回答