如何通过XSD强制元素仅包含CDATA

时间:2011-01-24 12:22:00

标签: xsd

我的要求是,根据我的架构验证的任何Xml文件都应符合以下条件。

OTHERWISE元素只能包含CDATA部分,而不包含任何其他部分。

实施例

有效的XML:<OTHERWISE ContentURI=""><![CDATA[<html>Good-bye</html>]]></OTHERWISE>

无效的XML:<OTHERWISE ContentURI="">ABC</OTHERWISE>

我正在尝试以下方法:

<xs:simpleContent> <xs:restriction base="OtherwiseAtt"> <xs:pattern value="^&lt;\!\[CDATA\[[a-zA-Z0-9]*\]\]&gt;" /> </xs:restriction> </xs:simpleContent>

任何东西都可以进入CDATA。我把[a-zA-Z0-9] *仅用于测试目的。

请帮帮我。

由于 萨布里

1 个答案:

答案 0 :(得分:2)

<![CDATA[]]>之间的内容由解析器处理。您的XML文件在验证之前已经过完全解析。 CDATA基本上是另一种逃避特殊字符的方法。验证器无法以您希望的方式确定元素是否包含CDATA。

验证的目的是对文档结构进行控制。它不是也不能强制执行转义文本的特定方法。

为什么您需要要求内容被CDATA转义?这听起来像是试图在早期阶段处理糟糕的设计选择。