2016-05-12 25 views
2

我想这是一个基本问题,但模式似乎让我感到困惑。 我想黑名单像一些字符,如+, - ,@,#,<,>。 如果字符在xml字段中,那么我想使xml无效。使用xsd模式的xml数据中的黑名单字符

在下面的示例中,如果字符串字段包含上述任何字符,我想将xml返回为无效。 如果数据是这样的“你好”。它应该是有效的。 我应该如何编写我的模式。感谢您检查这一点。

XML:

<DataType>System.String</DataType> 
<Value> 
     <String>[email protected]</String> 
</Value> 

在XSD:

<xs:element name="Value"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="String" type="xs:string" /> 
</xs:sequence> 
<xs:restriction base="xs:string"> 
<xs:pattern value="[^[email protected]#%&()<>?]"/> 
</xs:restriction> 
</xs:complexType> 
</xs:element> 

进行进一步的编辑这一部分:

我已经收到这些错误:在解析实体名称发生 错误。 - 在我的代码中 实体名称必须紧跟在唯一的xsd验证器工具中的实体引用中的&之后。 http://www.utilities-online.info/xsdvalidation/#.VzTwcYSDFBc

它似乎没有遵循这些特殊字符,我该如何改变这种情况? 再次感谢。

+0

只是一个想法,如果有正则表达式应该匹配** **有效的字符串,不应该是'[^ + - @#%&()<>?] +'? –

回答

1

请注意,到regular-expressions.info

特别值得注意的是完全没有锚点,如脱字符和美元,字界限和环视。 XML模式总是隐式地定位锚定整个正则表达式正则表达式必须匹配元素被认为有效的整个元素。

所以,匹配不包含+@#%&()<>?-(至少1个符号),你需要使用

字符串
<xs:pattern value="[^[email protected]#%&amp;()&lt;&gt;?-]+"/> 

注意<>&应该实体化的XML属性VA内使用略。

如果你想允许空值,应该使用*而不是+。需要注意的是-是在模式的结尾放,以免产生任何范围是这样的:

enter image description here

+0

感谢您的建议。我一直在努力实施。但是我得到这个错误。 - 解析EntityName时发生错误。我的语法有什么问题吗? – Sailoosha

+0

对不起,我已经完全忘记了那部分。检查如果您可以先使用'>'和'<'。而'&'必须是'&'。 –

+0

再次感谢。但是,我仍然在xsd validator的在线工具上发生错误。 http://www.utilities-online.info/xsdvalidation/#.VzTwcYSDFBc元素字符串同时具有类型属性和匿名类型子元素。只有其中一个元素是允许的。 – Sailoosha