元素声明:将内容定义为 #PCDATA 并出现一次子元素
在xml规范中,它说:
[定义:当该类型的元素可能包含字符数据时,该元素类型具有混合内容,并且可以选择散布子元素。]在这种情况下,子元素的类型可能会受到约束,但不会受到约束。他们的顺序或出现的次数
有没有办法解决这个问题,使这个 xml 有效:
<parent>
A text node
<child/>
</parent>
但这个 xml 无效:
<parent>
A text node
<child/>
<child/>
</parent>
另外,你知道为什么不允许这样做的任何原因吗?
<!ELEMENT parent (#PCDATA,child)>
In the xml spec, it says:
[Definition: An element type has mixed content when elements of that type may contain character data, optionally interspersed with child elements.] In this case, the types of the child elements may be constrained, but not their order or their number of occurrences
Is there any way to work around this to make this xml valid:
<parent>
A text node
<child/>
</parent>
but this xml invalid:
<parent>
A text node
<child/>
<child/>
</parent>
Also, do you know any reason for why this is not allowed?
<!ELEMENT parent (#PCDATA,child)>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Alderath,
首先,我不知道,但我不这么认为,不是在 DTD 中......而且,如果我可以这么说,你真的应该使用 XML 模式(即 XSD)而不是 DTD(它们)都是 90 年代的人了;-)。
XSD 允许您对文档内容进行更严格的控制,并且我非常确定使用 XSD 可以(甚至很容易)限制“混合类型”复杂元素中特定子元素的出现次数; 虽然我自己从来不需要(碰木头)这样做……所以把这当作是这里说的。
祝你好运。
干杯。 基思.
Alderath,
Up front, I don't know, but I don't think so, not in a DTD... and, if I may say so, you really should be using XML Schema's (i.e. XSD's) instead of DTD's (they're just so 90's;-).
XSD's allow you much tighter control over document content, and I'm pretty sure that restricting the number of occurrences of a particular child element in a "mixed type" complex element is possible (even easy) using an XSD; though I've never had need (touch wood) to do so myself... so treat this as heresay.
Good luck with that.
Cheers. Keith.
DEFINE:(a,b,c) 是表达允许子元素的顺序列表的方式。 您不应该对文本内容和某些元素进行排序。
解决:如果您希望该文本位于某些子元素中的任何确切位置,请将其包装在新的特定子元素中,并将该特定元素序列在其他子元素中。
记住:A = 任何; 允许文本内容(= PCDATA = 从 DTD 角度来看非标记字符串)必然允许任何文本内容。
我相信我是对的。 。 干杯
DEFINE: (a,b,c) is the way to express sequenced list of ALLOWED CHILD ELEMENTS. You are not supposed to sequence text-content and some elements.
SOLVE: If you want that text to be at any exact place among some child elements, wrap it in a new specific child element and sequence that specific element among other child elements.
REMEMBER: A = ANY; Allowing A text-content (= PCDATA = non-tagged string from DTD point of view) is necessarily allowing ANY text-content.
I believe i am right. . cheers