0

我正在尝试创建一个 XSD 来验证我们从客户那里收到的 XML。XML 看起来像这样:

<someElement>
   <items>
      <item1 name=”abc” />
      <item2 name =”def” />
      <item3 name =”ghi” />
   </items>
</someElement>

请注意,无论出于何种原因,项目名称还包含一个数字。项目数未指定,因文件而异。

由于元素名称中的行号,这样的东西不起作用:

<xs:sequence>
   <xs:element name="items" type="item" maxOccurs="unbounded" minOccurs="0" />
</xs:sequence>

什么是适当的 XSD 来验证这一点?

4

2 回答 2

3

在以前我不得不机械地处理设计糟糕的 XML 的情况下,无论是用于模式验证还是绑定到类模型,我发现使用 XSL 转换对 XML 进行预处理通常是一个好的开始。在许多情况下,这种预处理可以将设计糟糕的 XML 变成更好的东西。

在您的情况下,您可以编写一个转换

<item1 name="abc"/>

进入

<item num="1" name="abc"/>

这样就更容易为其设计模式。如果给定的 XML 输入不符合该模式,那么 XSLT 应该不理会它,然后验证将失败。

于 2012-05-11T16:03:38.583 回答
0

愚蠢的问题:您是否尝试过 type="xs:string" 而不是 type="item"?我想你可以使用这个获得一些灵感。

于 2012-05-11T09:23:42.483 回答