我想这是一个基本问题,但这种模式对我来说似乎很混乱。 我想将一些字符列入黑名单,例如+, - ,@,#,<,>。 如果字符在xml字段中,那么我想使xml无效。
在下面的示例中,如果字符串字段包含上述任何字符,我想将xml返回为无效。 如果数据是这样的话,那么#34;你好"。它应该是有效的。 我该怎么写我的模式。感谢您查看此内容。
XML:
<DataType>System.String</DataType>
<Value>
<String>Data@yours</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="[^+-@#%&()<>?]"/>
</xs:restriction>
</xs:complexType>
</xs:element>
进一步编辑此部分:
我一直在收到这些错误: 解析EntityName时发生错误。 - 在我的代码中 实体名称必须紧跟&amp;在唯一的xsd验证工具中的实体引用中。 http://www.utilities-online.info/xsdvalidation/#.VzTwcYSDFBc
它似乎没有遵循这些特殊字符,我该如何更改? 再次感谢。
答案 0 :(得分:1)
注意acc。到regular-expressions.info:
特别值得注意的是完全没有像插入符号和美元,单词边界和环视一样的锚点。 XML模式始终隐式锚定整个正则表达式。 正则表达式必须匹配元素的整个元素才能被视为有效。
因此,要匹配不包含+
,@
,#
,%
,&
,(
,{的字符串{1}},)
,<
,>
,?
(至少1个符号),您需要使用
-
请注意,<xs:pattern value="[^+@#%&()<>?-]+"/>
,<
和>
应该有权在XML属性值中使用。
如果您想允许空值,则应使用&
代替*
。请注意,+
放在模式的末尾,以便不创建任何范围,如下所示: