2

我有一个两部分的问题:

  1. 如何获取构面的regex表达式,XSD然后使用它来确定字符串是否与限制匹配?在我看来,这是“如何将 XML Schema 正则表达式转换为 .NET Regex”,但如果除了转换表达式之外,您还有其他方法可以让我这样做,我愿意接受建议。

  2. 如果测试(#1)失败,我如何使用该XSD模式regex自动创建一个满足约束的字符串?

4

2 回答 2

2
  1. XmlSchemaDatatype.ParseValue是您的答案。假设相关的简单类型有更多方面,并且您只想针对模式进行验证,那么您只需在XmlSchemaSimpleTypeRestriction.Facets中找到枚举方面,使用它的副本创建一个新的 XmlSchemaSimpleType,新的 XmlSchemaSimpleTypeRestriction内容和新的模式方面,使用您在上面挖掘的值。然后使用这个新创建的简单类型,调用 XmlSchemaDatatype.ParseValue。

    我建议不要在评论中提出您的建议,因为正则表达式“方言”是不同的。

  2. 我不知道这样的事情,可以免费或以其他方式获得。我确信它可以完成,但是当我自己需要它时,我从来没有找到真正有效的东西。如果你找到了,请分享。

于 2012-11-02T03:12:49.187 回答
1

将 XML Schema 正则表达式转换为 .NET 正则表达式并不难。

基本上,您需要用它们的 .NET 替代品(例如 \p{_xmlC} 和 \P{_xmlD})替换少数模式(例如 \c 和 \D)。

您还需要将表达式包装在 ^ 和 $ 标记中。

.NET 在https://github.com/Microsoft/referencesource/blob/master/System.Xml/System/Xml/Schema/FacetChecker.cs的方法 Preprocess 中实现了这一点

但是,如果您决定复制粘贴实现,请小心。

你需要更换循环

for (int position = 0; position < length - 2; position ++)

for (int position = 0; position < length - 1; position ++)

因为出于优化原因,Preprocess 假定输入表达式包含在括号中。

于 2015-06-24T19:47:37.233 回答