【问题标题】:How to force an element to contain only CDATA through XSD如何通过 XSD 强制元素仅包含 CDATA
【发布时间】:2011-01-24 12:21:59
【问题描述】:

我的要求是任何将针对我的架构进行验证的 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]* 只是为了测试目的。

请帮帮我。

谢谢 萨布里

【问题讨论】:

标签: xsd


【解决方案1】:

&lt;![CDATA[]]&gt; 之间的内容由解析器处理。您的 XML 文件在验证时已被完全解析。 CDATA 基本上是另一种转义特殊字符的方法。验证器将无法确定元素是否以您希望的方式包含 CDATA。

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

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

【讨论】:

  • 我从您的回答中了解到,当 XML 文件根据架构验证时,CDATA 部分已经被 CDATA 中的文本替换,这对我来说完全有意义。
  • 正如您所说的“验证器将无法确定元素是否以您希望的方式包含 CDATA”,那么还有其他方法吗?
  • 如果不是那么我们可以强制一个元素不为空吗?它必须包含一些不再是子元素的内部文本。
  • @Saurabh,CDATA 与空虚没有任何关系。简而言之,没有明智的方法来确定 XML 元素是否包含 CDATA,而且您不需要 - 从概念上讲,转义的 PCDATA 和 CDATA 是相同的。但是,如果你想确保元素只包含文本并且不为空,那么你可能应该问另一个问题
猜你喜欢
  • 2022-01-21
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多