使用xsd模式

时间:2016-05-12 19:57:56

标签: c# regex xml xsd pattern-matching

我想这是一个基本问题,但这种模式对我来说似乎很混乱。 我想将一些字符列入黑名单,例如+, - ,@,#,<,>。 如果字符在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

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

1 个答案:

答案 0 :(得分:1)

注意acc。到regular-expressions.info

  

特别值得注意的是完全没有像插入符号和美元,单词边界和环视一样的锚点。 XML模式始终隐式锚定整个正则表达式正则表达式必须匹配元素的整个元素才能被视为有效。

因此,要匹配不包含+@#%&(,{的字符串{1}},)<>?(至少1个符号),您需要使用

-

请注意,<xs:pattern value="[^+@#%&amp;()&lt;&gt;?-]+"/> <>应该有权在XML属性值中使用。

如果您想允许空值,则应使用&代替*。请注意,+放在模式的末尾,以便不创建任何范围,如下所示:

enter image description here