0

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

4

3 回答 3

6

在 XML 中,格式良好的东西和有效的东西之间存在区别。有时人们说有效时他们的意思是格式良好,这是令人困惑的。XML 是一组用于构建词汇表的句法规则。就其本身而言,XML 没有说明允许哪些元素和属性,或者您可以将它们放在哪里。如果一个文档遵循 ​​XML 语法,那么它就是格式良好的。您的示例是格式良好的 XML。

有效性意味着所使用的特定元素和属性都按照某些 DTD 或模式使用。您给出了这个示例 DTD 片段:

<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* >

您的同事是正确的,您提供的 XML 根据该 DTD 是有效的(当然,假设所有测试元素的内容都是有效的)。如果您的 DTD 看起来像这样:

<!ELEMENT dt (test0 | test1 | test2 | test3)* >

那么您的示例将无效,但它仍然是格式良好的。

在实际实践中,混合文本和子元素是极其常见的。

于 2013-07-10T13:57:00.003 回答
3

你不正确。

XML 内容可以包含元素和文本(字符数据)的混合。

您可以在任何 XHTML 文档中找到这方面的示例。

于 2013-07-10T13:34:00.247 回答
3

这是格式良好的XML。文本节点完全没有问题,如果其他节点也可以混合,这称为“混合内容”

有效的 XML 需要定义您的代码片段中缺少的 XML 模式或 DTD。如果您添加一个禁止混合内容的内容,它将保持格式良好的 XML,只是不遵循该架构。

于 2013-07-10T13:33:51.477 回答