同一xml文件中的多个xml元素

时间:2013-01-17 21:06:38

标签: xml

在xml文件中,这可以:

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

但是在xml文件中使用它不是(至少那是validation所说的):

<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文件中有多个目标元素相互之后是非法的?

2 个答案:

答案 0 :(得分: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中的所有元素。

答案 1 :(得分:0)

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

请参阅维基百科的root element文章或我从中提取此引文的W3C recommandation paper

  

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