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

如何在XSD的simpleType中自定义规则,忽略<br>标签校验字符长度

解决XSD校验时忽略<br>标签统计字符的方案

你的核心问题在于:原XSD把product_long_description当成纯字符串类型,但实际上它是混合内容(文本+<br>子元素),而且需要忽略<br>来统计文本长度。XSD 1.0无法直接实现这种自定义校验,必须使用XSD 1.1的断言(xs:assert)特性来完成。

修正后的XSD实现方案

<xsd:element name="product_long_description">
    <xsd:annotation>
        <xsd:documentation>Long Description of Product</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType mixed="true">
        <xsd:sequence>
            <!-- 允许任意数量的<br>标签,可分布在文本任意位置 -->
            <xsd:element name="br" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <!-- 自定义断言:计算去掉所有<br>后的文本长度不超过4000 -->
        <xsd:assert test="string-length(translate(., '&lt;br&gt;', '')) &lt;= 4000"/>
    </xsd:complexType>
</xsd:element>

代码说明

  1. 混合内容声明:通过mixed="true"标记该元素允许文本与<br>子元素混合存在,同时用minOccurs="0"和maxOccurs="unbounded"放开<br>标签的数量限制。
  2. 断言校验逻辑:
    • translate(., '&lt;br&gt;', ''):将元素内容中的<br>字符串替换为空,彻底移除所有<br>标签的字符占用。
    • string-length(...) <= 4000:计算处理后的纯文本长度,确保不超过4000字符限制。
    • 若需要去除文本前后空格或中间多余空白,可在translate外层包裹normalize-space(),即string-length(normalize-space(translate(., '&lt;br&gt;', ''))) <= 4000。

注意事项

  • 该方案依赖XSD 1.1标准,需使用支持XSD 1.1的校验工具,比如Saxon系列、Xerces2-J(需手动开启XSD 1.1支持)。
  • 若必须兼容XSD 1.0,只能通过额外的自定义代码(如Java/Python脚本)补充校验逻辑,XSD 1.0本身无法实现忽略特定标签的长度统计。

内容的提问来源于stack exchange,提问作者Suman Shekhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:42:09