单个XML元素可以有多个值吗?

时间:2015-05-12 13:32:09

标签: xml xsd

产品可以符合零或几个标准,例如STD1,STD2,STD3。

XML有一个可选字段,我们称之为@RunWith(Parameterized.class) public class SeleniumTestcaseParameterized { WebDriver driver; private String userName,password; public SeleniumTestcaseParameterized(String userName,String password) { this.userName=userName; this.password=password; } @Parameters public static Collection<Object[]> data(){ Object[][] data= new Object[][]{{"usernameFromForm","passwordFromForm"}}; return Arrays.asList(data); } ........ }

我能做出类似的东西吗? (这里我使用逗号。)

complies

如何定义此XSD类型?

1 个答案:

答案 0 :(得分:3)

为具有多个值的元素设计XML结构的正确方法是单独标记每个此类值,在这种情况下为standard元素:

<complies>
  <standard>STD1</standard>
  <standard>STD2</standard>
</complies>

这将允许XML模式(XSD,DTD等)直接验证。这是这种结构的简单XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="complies">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="standard" minOccurs="0" maxOccurs="unbounded">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="STD1"/>
              <xs:enumeration value="STD2"/>
              <xs:enumeration value="STD3"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

此方法还允许您直接利用XML解析器,从而避免必须微分析complies元素。

更新

或者,如果您不想引入单独的standard元素,

<complies>STD1 STD2</complies>

你可以使用XSD&#39; xs:list构造:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="complies">
    <xs:simpleType>
      <xs:list>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="STD1"/>
            <xs:enumeration value="STD2"/>
            <xs:enumeration value="STD3"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:list>
    </xs:simpleType>
  </xs:element>
</xs:schema>

感谢John Saunders提供这个有用的建议。