【发布时间】:2019-05-11 01:57:30
【问题描述】:
使用 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 正确地失败架构验证?
【问题讨论】:
-
请清楚说明您的问题 - 谢谢
-
通过澄清问题更新。