【问题标题】:Xml schema validation does not fail on trailing line-feedXML 模式验证在尾随换行时不会失败
【发布时间】: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 正确地失败架构验证?

【问题讨论】:

  • 请清楚说明您的问题 - 谢谢
  • 通过澄清问题更新。

标签: c# .net xml xsd .net-core


【解决方案1】:
<xs:pattern value="[\w]+"/>

[\w]+

匹配作为“单词字符”的单个字符(Unicode;任何字母或表意文字、数字、连接标点符号)«[\w]+» 一次到无限次,尽可能多次,按需回馈(贪婪)«+»

验证是基于架构完成的,如果您不拥有架构并且无法更改它,则遵守其规则或与提供架构的一方协商。

要仅匹配不包含 LF 的字符串,请使用:

[^\n]+

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
  • 我无法更改架构。我们有合同义务使用由标准机构管理的模式。不过谢谢你的建议。这很有趣。
  • 所以我用 [\w]+ 进行了一些测试。如果字符串包含空格,则架构验证失败。如果它只是一个没有空格和尾随换行符的字符串,它不会失败架构验证。
  • 验证我们基于架构完成,如果您不拥有架构并且无法更改它,则遵守其规则或与为您提供架构的一方协商。有关其他正则表达式,请参阅更新的答案。
  • @Kris 我很欣赏我们的参与。如果我使用模式 [^\n]+ 更新上面的代码,文本“一些字符串内容\n”仍然不会失败架构验证。
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多