我和我的同事陷入了关于xml有效性的争论。 我非常有信心xml节点可以有文本节点或其他xml节点,但不能同时具有这两个节点:
换句话说 - 这是一个有效的xml吗? (我说的不是)
<dt>
blah blah text
<test0>
some node content
</test0>
<test1>
blah blah some text <some_node>A</some_node>
</test1>
<test2>
noncount
</test2>
<test3>
blah blah some text <some_node>B</some_node>
</test3>
</dt>
编辑:我的同事辩称,因为.dtd文件中有#PCDATA,所以:
<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* >
这意味着其中可能还有其他xml标签以及文本。
答案 0 :(得分:6)
XML在形式良好和有效之间存在区别。有时人们说他们的意思是良好的形式是有效的,这是令人困惑的。 XML是一组用于构造词汇表的语法规则。就其自身而言,XML没有说明允许哪些元素和属性,或者您可以放置它们的位置。如果文档遵循XML语法,那么它就是格式良好的。您的示例是格式良好的XML。
有效性意味着所使用的特定元素和属性都是根据某些DTD或模式使用的。您举了这个示例DTD片段:
<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* >
您的同事是正确的,根据该DTD,您提供的XML是有效的(当然,假设所有测试元素的内容都有效)。如果你的DTD看起来像这样:
<!ELEMENT dt (test0 | test1 | test2 | test3)* >
然后你的例子无效,但它仍然是格式良好的。
在实际操作中,混合文本和子元素非常常见。
答案 1 :(得分:3)
这是格式良好的 XML。文本节点完全没问题,如果混合了其他文件节点,也称为"mixed content"。
有效的XML需要定义一个XML Schema或DTD,这在您的代码段中缺失。如果添加一个禁止混合内容的内容,它将保留格式良好的XML,而不是遵循该模式。
答案 2 :(得分:3)
你错了。
XML内容可以包含元素和文本(字符数据)的混合。
您可以在任何XHTML文档中找到相关示例。