首页 > 解决方案 > DTD 定义具有混合内容的元素的出现次数

问题描述

在 DTD 中声明混合内容元素时如何为子元素添加约束?这是我的xml。

<!ELEMENT manager (contact)>
<!ATTLIST manager name CDATA #REQUIRED>
<!ELEMENT contact (#PCDATA|office|mobile+|email*)*>
<!ELEMENT mob (#PCDATA)>
<!ELEMENT office (#PCDATA)>
<!ELEMENT email (#PCDATA)>

当我写这篇文章时,我收到一个错误,当子元素的类型受到限制时,混合内容模型“联系人”必须以“)*”结尾。

请帮忙..

contact 元素的约束条件是,office 元素必须只出现一次,mobile 元素必须出现一次或多次,email 元素是可选的。

这就是我想要的

<contact>
            Contact Details:
            <email>sam@yahoo.com</email>
            <mob>077769768</mob>
            <office>036568879</office>
</contact>

标签: xmlxml-validationdtd

解决方案


混合内容只能以一种方式声明。您无法指定一个元素在混合内容声明中可以出现多少次。

您的声明必须如下所示:

<!ELEMENT contact (#PCDATA|office|mobile|email)*>

contact 元素的约束条件是,office 元素必须只出现一次,mobile 元素必须出现一次或多次,email 元素是可选的。

您的限制听起来不像您需要混合内容;也许这就足够了:

<!ELEMENT contact (office,mobile+,email?)>

推荐阅读