我有一个两部分的问题:
如何获取构面的
regex
表达式,XSD
然后使用它来确定字符串是否与限制匹配?在我看来,这是“如何将 XML Schema 正则表达式转换为 .NETRegex
”,但如果除了转换表达式之外,您还有其他方法可以让我这样做,我愿意接受建议。如果测试(#1)失败,我如何使用该
XSD
模式regex
自动创建一个满足约束的字符串?
XmlSchemaDatatype.ParseValue是您的答案。假设相关的简单类型有更多方面,并且您只想针对模式进行验证,那么您只需在XmlSchemaSimpleTypeRestriction.Facets中找到枚举方面,使用它的副本创建一个新的 XmlSchemaSimpleType,新的 XmlSchemaSimpleTypeRestriction内容和新的模式方面,使用您在上面挖掘的值。然后使用这个新创建的简单类型,调用 XmlSchemaDatatype.ParseValue。
我建议不要在评论中提出您的建议,因为正则表达式“方言”是不同的。
我不知道这样的事情,可以免费或以其他方式获得。我确信它可以完成,但是当我自己需要它时,我从来没有找到真正有效的东西。如果你找到了,请分享。
将 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 假定输入表达式包含在括号中。