我使用XmlReader对数据类型不允许换行的XML元素执行模式验证。如果该值在字符串的开头或结尾之前的任何位置包含换行符,则架构验证将按预期失败。如果该值在换行符之前以空格结尾,则它将失败架构。只有当换行符位于字符串的末尾时,架构验证才不会失败。我相信它应该会失败。
这是一个示例架构:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="StringContent" type="an" />
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
这是示例代码:
var xmlSchemaSet = new XmlSchemaSet();
xmlSchemaSet.Add(XmlSchema.Read(new StringReader(schema),
(sender, args) => { Console.WriteLine(args.Exception.Message); }));
var xmlReaderSettings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
Schemas = xmlSchemaSet
};
xmlReaderSettings.ValidationEventHandler +=
delegate (object sender, ValidationEventArgs args)
{
Console.WriteLine($"{description}: {args.Exception.Message}");
};
var xmlDateReader = XmlReader.Create(
new StringReader("<StringContent>some string content\n</StringContent>"), xmlReaderSettings);
while (xmlDateReader.Read()) { }
我们使用的实际模式是由标准机构管理的,因此,我无法对其进行更改。当尾随换行符时,有没有办法让XmlReader正确地使模式验证失败?
答案 0 :(得分:0)
<xs:pattern value="[\w]+"/>
匹配单个字符,即“单词字符”(Unicode;任何字母或表意文字,数字,连接器标点符号)«[\ w] +» 在一次和无限制的时间之间,尽可能地多次,根据需要(贪婪)“«+»
验证是基于模式进行的,如果您不拥有该模式并且无法更改它,那么请遵守其规则或与提供该模式的一方进行协商。
要仅匹配不包含LF的字符串,请使用: