这是有效的XML吗?

Mil*_*kov 2 xml tree logic structure

我知道语法是有效的,但我的问题是它是否在逻辑上有效:

<parent>
    <name>John</name>
    <child>Mary</child>
    <child>Lucy</child>
    <child>Hannah</child>
</parent>
Run Code Online (Sandbox Code Playgroud)

或者正确的方法是:

<parent>
    <name>John</name>
    <child>
        <name>Mary</name>
    </child>
    <child>
        <name>Lucy</name>
    </child>
    <child>
        <name>Hannah</name>
    </child>
</parent>
Run Code Online (Sandbox Code Playgroud)

是否有一些在线文件明确说明了什么是对错?

Tol*_*ayi 15

我更喜欢后者,因为它清楚地表明它是玛丽的孩子的名字,而不是玛丽的孩子自己.

我认为使用属性甚至更好,如下所示:

<parent name="John">
    <child name="Mary" />
    <child name="Lucy" />
    <child name="Hannah" />
</parent>
Run Code Online (Sandbox Code Playgroud)

因为它清楚地表明该名称只是父/子实体的一个特征.

  • +1表示建议使XML不那么臃肿:) (3认同)
  • 它在传输中也使用较少的字节,但如果转换大小确实是一个最重要的问题,那么XML(或者当然具有大量元数据的XML,如本页中的示例)可能不是最佳选择.EDI喜欢的语法可能更小,如"John | Mary | Lucy | Hannah",如果你接受二进制和字典,你可以真的非常小...... + 1 (2认同)

Wim*_*dse 6

从可扩展性的角度来看,第二个似乎更有意义.如果您需要为第一个孩子添加生日,会发生什么?是的,你可以添加一个XML属性,但迟早会因为添加复杂类型甚至基本枚举而陷入困境.

此外 - 将子元素分组在单个"children"元素下可能更好:

<parent>
    <name>John</name>
    <children>
      <child>
        <name>Mary</name>
        <dob>1970-01-01</dob>
      </child>
      <child>
        <name>Lucy</name>
        <dob>1971-01-01</dob>
      </child>
      <child>
        <name>Hannah</name>
        <dob>1974-01-01</dob>
      </child>
    <children>
</parent>
Run Code Online (Sandbox Code Playgroud)

还有一件事:你可能不会将孩子归为一个单一的父元素,但我已经将其与你的原始元素保持一致.


Dav*_*vid 5

这取决于你将如何处理它.如果您将来可能需要存储关于每个人的更多数据,那么第二个版本会更好.