生成与XSD匹配的XML文档

时间:2012-02-28 08:26:56

标签: xml xsd generator

我有一个包含一些模式的XSD文件,需要创建一堆XML文档来测试匹配此模式。我知道有一些工具和框架,比如xsd.exe,JAXB等,它们都是从XSD创建的。

基本上我需要执行以下步骤:

  • 加载XSD
  • 解析XSD
  • 创建匹配的XML文档

示例:

<xs:simpleType name="typeName">
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-ZÄÖÜß][A-ZÄÖÜß'/\-.+ ]*"/>
    <xs:pattern value="+[ ]*"/>
  </xs:restriction>
</xs:simpleType>

这样做的标准方法是什么?关键是所有这些都应该在运行时发生,即不通过xsd.exe或其他方式创建类。最好是C#或Java,但欢迎使用任何语言。

3 个答案:

答案 0 :(得分:2)

Microsoft有一种称为XmlSampleGenerator的东西。看看这个:

http://msdn.microsoft.com/en-us/library/aa302296.aspx

这是它的局限性:

  • W3C XML架构标识约束(xs:key,xs:keyref, 生成实例文档时不支持xs:unique)。
  • 如果xs:pattern facets存在于简单类型上,则生成的值可能不会 符合模式。
  • xs:QName类型的枚举可能不会 按预期工作,因为这需要架构中的前缀 保存。
  • xs:ENTITY,xs:ENTITIES和xs:NOTATION类型不是 支持的。
  • xs:仅在枚举时生成base64Binary内容 存在于该类型的模式中。

答案 1 :(得分:0)

OxygenXmlXmlSpy可以根据XSD模板生成示例XML文件。两者均提供1个月免费试用AFAIK。如果你想购买OxygenXml更便宜。如果内存正确地为我提供服务,那么就不会填充随机字符串等等 - 你需要自己做。但是,它们会为您提供与模式匹配的格式正确的文档。

修改 如果你想以编程方式生成xml,你可以试试这样的想法吗?可能会让你走出一个洞?我自己没试过,只是用谷歌搜索。

Generate a sample xml document from xsd schema in net

答案 2 :(得分:0)

如果XSD相当简单(除了定义文件结构的1之外没有复杂的类型)并且没有深层次结构,您可以尝试自己滚动。我曾经做过一次个人项目(我没有计划分发),也没有我想象的那么糟糕。我也想说实现是特定于XSD的,所以如果你打算从许多不同的XSD生成XML或使用未知的XSD,那么这可能不是你的答案。

我必须看看能否找到代码,但步骤非常简单:

  1. 将XSD加载为XDocument
  2. 为输出XML创建新的XDocument
  3. 使用LINQ查询XSD
  4. 单步执行查询结果的每个元素并获取名称,并将其添加到输出XDocument
  5. 显然这只会生成XML的结构,由你来添加你想要的值,但是一旦完成,你可以回过头来使用传统的XSD来验证XML数据。捕获任何数据错误的方法。

    加载XSD并使用LINQ解析它在我的答案中有所涉及question在答案的底部还有一些链接可以链接到其他问题/博客,以便在必要时解析更复杂的XSD。