我有两个问题:
如何获取regex
方面的XSD
表达式,然后使用它来确定字符串是否与限制匹配?在我看来,这是“我如何将XML Schema正则表达式转换为.NET Regex
”,但如果除了转换表达式之外你还有另一种方式可以做我的建议,我愿意接受建议。
如果测试(#1)失败,我如何使用XSD
模式regex
自动创建满足约束条件的字符串?
答案 0 :(得分:2)
XmlSchemaDatatype.ParseValue是您的答案。假设关联的简单类型具有更多方面,并且您只想针对模式1进行验证,那么您必须在XmlSchemaSimpleTypeRestriction.Facets中简单地找到枚举方面,使用它的副本来创建新的XmlSchemaSimpleType,使用您上面挖出的值,使用新的XmlSchemaSimpleTypeRestriction Content和新的pattern facet(s)。然后使用这个新创建的简单类型,调用XmlSchemaDatatype.ParseValue。
我会在评论中反对你的建议,因为正则表达式“方言”是不同的。
我不知道有这样的事情,可以免费或其他方式获得。我确信它可以做到,但是当我自己需要的时候,我从来没有找到真正有效的东西。如果你找到了,请分享。
答案 1 :(得分:1)
将XML Schema正则表达式转换为.NET正则表达式并不太困难。
基本上,您需要使用\ p {_xmlC}和\ P {_xmlD}之类的.NET替代品替换少量模式,例如\ c和\ D..
此外,您需要将表达式包装在^和$ markers中。
中的方法Preprocess中实现了这一点如果您决定复制粘贴实现,请小心。
您需要替换循环
for (int position = 0; position < length - 2; position ++)
与
for (int position = 0; position < length - 1; position ++)
因为出于优化原因,Preprocess假定输入表达式括在括号中。