我有一个模式给了我这个定义,在这个模式中没有任何对空白的引用(从不对任何东西指定保存/折叠/替换)。
<xs:element name="Content">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>我遇到了一些代码,这些代码正在对这个元素的解析过程中产生的字符串执行.trim()。如果这意味着whiteSpace值为collapse,则trim()似乎是有效的,但如果它暗示preserve或replace,则trim()将是一个bug。其他地方的第三方代码似乎将其视为preserve,但我不太相信这是一个基于模式的合理决定。
删除剪裁是我需要做的工作,使我们的代码匹配他们的代码,所以我的路径是明确的,但我开始好奇现有的行为是否在技术上是正确的(如果不是,代码中还有其他地方可能需要修改)。
我花了半个小时在谷歌上搜索xml模式规范,但没有找到明确的答案,所以在我花更多的时间之前,根据规范的2-3个区域的组合,找出可能是一个隐含的缺省值,我想我会在这里询问,希望有人已经找到了这个问题,并且知道了答案。(或者有人好奇,为了好玩而追踪它)。
发布于 2016-06-20 17:46:17
XML可用于约束从字符串派生的类型的值空间;它不指示whiteSpace解析器修剪或规范字符串值。将其视为指定XML文档组件有效性的约束,而不是将更改定向到这些组件的解析值。
发布于 2016-06-20 22:47:25
whiteSpace方面只适用于简单类型,所以我看不出它与混合内容复杂类型有什么关系。
在传统的使用混合内容来表示标记的文档文本中,空格通常是重要的。当然,没有办法在模式中声明它没有意义。但是,您的应用程序对数据的了解可能比模式中所述的要多;只有应用程序才能知道是否可以安全地裁剪空格。
https://stackoverflow.com/questions/37928201
复制相似问题