我有一个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元素和未知数量的字段属性
由于
答案 0 :(得分:2)
如果您使用的是Visual Studio 2008:
这将生成您的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方案创建类并在我的代码中使用它们。
无论如何,感谢大家