这个xml是有效的吗?

时间:2013-07-10 13:31:35

标签: xml xml-parsing

我和我的同事陷入了关于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标签以及文本。

3 个答案:

答案 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文档中找到相关示例。