xml - 重复元素 - 这是有效的吗?

时间:2014-07-30 00:49:10

标签: xml

根据在线验证服务,这个XML似乎是有效的,但我怀疑每个步骤都应该包含在标记中以使其唯一。这违反了什么规则?

<tasks>                                               
       <step>fix fan</step>
       <NoInc>RT260454</NoInc>             

       <step>fix power supply</step>
       <NoInc>RT260456</NoInc>                 
</tasks> 

这样表达更好吗?

<tasks>                                               
   <task>
       <step>fix fan</step>
       <NoInc>RT260454</NoInc>             
   </task>
   <task>        
       <step>fix power supply</step>
       <NoInc>RT260456</NoInc>                 
   </task>
</tasks> 

将此映射到数组时,我是否有可能使用第二步覆盖第一步?

2 个答案:

答案 0 :(得分:1)

它是有效的xml,这是一个支持xml的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
      xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="tasks" type="tasksType"/>
  <xs:complexType name="tasksType">
    <xs:choice maxOccurs="unbounded" minOccurs="0">
      <xs:element type="xs:string" name="step"/>
      <xs:element type="xs:string" name="NoInc"/>
    </xs:choice>
  </xs:complexType>
</xs:schema>

如果在step和noinc之间需要1对1映射,那么将它们包装在另一个标记中是有意义的。

答案 1 :(得分:-1)

XML有效且格式正确。但是,如果元素的顺序很重要,您应该仔细考虑文档的设计。同样有效的文档将首先显示修复电源,然后再显示修复风扇。或者甚至是两个<NoInc>元素,然后是两个<Step>元素。

此外,如果<NoInc>元素以某种方式依赖于<Step>元素,则应通过将NoInc文本作为<Step>的属性来在设计中显示此关系元素或为每对<Step><NoInc>元素创建父元素。

例如:

  <Task>
      <SubTask>
          <step>fix fan</step>
          <NoInc>RT260454</NoInc>
      </SubTask>
      <SubTask>
          <step>fix power supply</step>
          <NoInc>RT260456</NoInc>
      </SubTask>
  </Task>