0

在 xml 文件中可以:

<target name="test">
    <exec executable="app">
        <arg value="run"/>
        <arg value="stop"/>
    </exec>     
</target>

但是在 xml 文件中包含它不是(至少这是验证所说的):

<target name="test">
    <exec executable="app">
        <arg value="run"/>
        <arg value="stop"/>
    </exec>     
</target>
<target name="test">
    <exec executable="app">
        <arg value="run"/>
        <arg value="stop"/>
    </exec>     
</target>

为什么在同一个xml文件中有多个目标元素是非法的?

4

2 回答 2

2

“为什么”的问题很难回答。部分原因是在 XML 中是这样的,因为它在 SGML 中。强制执行单个文档容器元素确实有一些优势,尽管主要可能是优势;你知道什么时候到了结尾,有点被根元素结尾之后可能有注释和处理指令的事实所破坏。

如果您想在流式上下文中使用 XML 格式,例如在日志文件中您想继续在末尾添加元素,这会有些痛苦。

该问题的一个常见解决方案是观察具有多个顶级元素的文件不是格式良好的文档,而是格式良好的外部解析实体。因此,如果您生成一个log.xml包含数十个顶级元素的文件,那么您无法将其解析为文档,但您可以制作一个引用外部解析实体的静态小文档,log.xml然后您就回到了指定的领域。

wrapper.xml

<!DOCTYPE wrapper [
<!ENTITY thelog SYSTEM "log.xml">
]>
<wrapper>
&thelog;
</wrapper>

然后,如果您解析wrapper.xml,解析器将构造一个包含根元素的文档,该根元素wrapper包含文件中的所有元素log.xml

于 2013-01-17T21:35:05.577 回答
0

因为一个有效的 xml 文件应该有一个(并且只有一个)根元素。

请参阅维基百科的根元素文章或我从中提取此引用的W3C 推荐文件:

[定义:只有一个元素,称为根或文档元素,它的任何部分都不会出现在任何其他元素的内容中。]

于 2013-01-17T21:07:36.767 回答