You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSD的restriction限制规则中允许匹配换行符

带换行CDATA元素的XSD验证方案

问题根因

XML Schema 正则表达式的官方规范中,.元字符默认不匹配换行符(\n)、回车符(\r)等行终止符,所以你用.*作为规则时,只要CDATA内包含换行就会匹配失败,这是XSD的标准特性,并非Python xmlschema库的bug。

正确验证规则

你需要满足两个验证要求:

  • 允许文本中包含任意字符(含换行)
  • 文本中至少存在一个非空白字符
    对应的XSD正则表达式为 [\s\S]*\S[\s\S]*:
    • \s 匹配所有空白字符(含换行、制表符、空格等)
    • \S 匹配所有非空白字符
    • 规则逻辑为「任意个任意字符 + 至少1个非空白字符 + 任意个任意字符」,完全覆盖需求场景

小提示:如果不需要「至少一个非空白字符」的限制,仅需保留所有字符和换行,直接把规则改成[\s\S]*即可。

XSD示例代码

假设需要验证的目标元素为custom_text,完整的XSD定义片段如下:

<xs:element name="custom_text">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <!-- 禁止使用xs:token作为基类,会自动折叠换行和空白 -->
      <xs:pattern value="[\s\S]*\S[\s\S]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

换行保留说明

只要你在解析XML文件时没有主动开启「格式化缩进、剔除空白节点」的配置,XML解析器会完整保留CDATA内部的所有换行符,xmlschema库验证时会读取原始文本内容,不需要额外配置即可保留换行。

内容的提问来源于stack exchange,提问作者Sean Duggan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:57:01