元素声明:将内容定义为#PCDATA,并将一个子元素出现

时间:2009-08-07 11:39:48

标签: xml dtd pcdata

在xml规范中,它说:

[定义:当该类型的元素可能包含字符数据时,元素类型具有混合内容,可选地穿插子元素。]在这种情况下,子元素的类型可能受到约束,但不是它们的顺序或数量发生次数

有没有办法解决这个问题,使这个xml有效:

<parent>
   A text node
   <child/>
</parent>

但是这个xml无效:

<parent>
   A text node
   <child/>
   <child/>
</parent>

另外,你知道为什么不允许这样做的原因吗?

<!ELEMENT parent (#PCDATA,child)>

2 个答案:

答案 0 :(得分:0)

Alderath,

前面,我不知道,但我不这么认为,不是在DTD ......而且,如果我可以这么说,你真的应该使用XML Schema(即XSD)而不是DTD(它们只是90年代; - )。

XSD允许您对文档内容进行更严格的控制,我很确定使用XSD可以限制“混合类型”复杂元素中特定子元素的出现次数(甚至很容易);虽然我自己从来没有需要(触摸木头)这样做...所以把它视为异端。

祝你好运。

干杯。基思。

答案 1 :(得分:0)

DEFINE:(a,b,c)是表达允许的儿童元素的序列列表的方式。你不应该序列文本内容和一些元素。

解决:如果您希望该文本位于某些子元素中的任何确切位置,请将其包装在新的特定子元素中,并将序列包含在其他子元素中。

记住:A = ANY;从DTD的角度来看,允许文本内容(= PCDATA =未标记的字符串)必然允许任何文本内容。

我相信我是对的。 。欢呼声