xml - 在 DTD 模式中声明多个规则

标签 xml dtd

我有一个带有 dtd 架构的 xml 文件。 我尝试在属性和元素上添加一些规则。 到目前为止,我成功拥有了两个 ATTLIST对于以下格式的不同元素:

<!DOCTYPE root [
 <!ATTLIST a ..... >
 <!ATTLIST b ..... >
]>

现在我希望执行以下操作: 假设我有:

<a ...><value>some_value_with_&&&</value></a>

当然,该值必须用 <![CDATA[some_value_with_&&&]]> 包围

由于我已经有了一个 dtd 模式,我想我可以删除 CDATA(保留它最初的样子),然后在 DTD 中声明它的 cdata 类型,这可能吗? 我尝试添加以下内容: <!ELEMENT value (#CDATA)> 但我有两个问题:

  1. 它强制自己(我假设)在任何值元素上,我可以将其限制为仅 a元素?

  2. 我使用 java。我收到以下错误: A '(' character or an element type is required in the declaration of element type "value".

这是为什么?

最佳答案

#CDATA是一个不存在的关键字。无法将元素声明为 #CDATA 类型。

CDATA关键字(不带 # )有两种不同的用途:

  1. attribute declarations in DTDs .
  2. CDATA sections ,仅出现在 XML 文档实例中(不能在 DTD 中声明)。

需要明确的是:不可能将元素声明为“cdata/CDATA/#CDATA”类型。 CDATA 部分 ( <![CDATA[...]]> ) 为 XML 作者提供了便利。如果需要,它只需在 XML 文档中使用即可。它不是在 DTD 中声明的内容。

另请参阅此答案:https://stackoverflow.com/a/12128273/407651 .

关于xml - 在 DTD 模式中声明多个规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096232/

相关文章:

excel - 如何在 Excel VBA 中正确使用 SelectSingleNode 来选择大型 XML 文件中的节点

maven - 由于缺少 http ://jetty. mortbay.org/configure.dtd,故障保存无法启动 jetty 服务器

xml dtd-如何避免解析元素的内容?

java - 绑定(bind)声明命名空间 "http://annox.dev.java.net"将被忽略,因为它不是由 jaxb :extensionBindingPrefixes attribute 指定的

java - JAXB 使用不同标签解码 XML 元素

xml - Xpath - 根据前 sibling 和后 sibling 选择节点

ios - 无法访问 4 天天气 - MSN 天气

xml - 如何在 Oracle DB 中禁用 XML DTD 验证?

java - 在 Java 中引用本地 DTD

java - 在XHTML 1.1文档上调用normalizeDocument()时,Java 11 XML解析器会暂停并显示实体错误