在XML 1.1

时间:2018-02-03 16:46:09

标签: xml xsd oxygenxml xml-1.1

这就是我如何定义具有替代类型的元素。

  

alternative.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  elementFormDefault="qualified"
  vc:minVersion="1.1">

    <xs:complexType name="DefaultType">
        <xs:sequence>
            <xs:element name="string" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="OtherType">
        <xs:sequence>
            <xs:element name="number" type="xs:integer"/>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="root">
        <xs:alternative test="@switchTo = 'OtherType'" type="OtherType"/>
        <xs:alternative type = "DefaultType"/>
    </xs:element>

</xs:schema>
  

sampleA.xml

<?xml version="1.1" encoding="UTF-8"?>

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="alternative.xsd">

    <string>
        Sample
    </string>

</root>
  

sampleB.xml

<?xml version="1.1" encoding="UTF-8"?>

<root switchTo="OtherType"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="alternative.xsd">

    <number>
        23571113
    </number>

</root>

首先我的验证器都没有支持它,所以我切换到Oxygen XML进行评估。它验证了所有内容,并且类型解析和验证适用于每个替代方案,但我收到错误:

  

属性&#39; switchTo&#39;不允许出现在元素&#39; apply&#39;。

我知道该元素没有为元素&#39; root&#39;定义,但我也不知道应该在哪里定义它!我以探索的方式尝试了各种各样的地方,没有运气。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

如果为元素设置了不同的复杂类型,那么复杂类型需要声明要为元素提供的属性:

public void q7Check2() {

    if (q7R1.isChecked() && q7R2.isChecked()) {
        score = score + (100 / 8);
        q7R1.setTextColor(correctState);
        q7R2.setTextColor(correctState);
        q7Img.setImageResource(R.drawable.ddvspan);
    } else if (q7R3.isChecked() && q7R4.isChecked()) {
        q7R3.setTextColor(wrongState);
        q7R4.setTextColor(wrongState);
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.correct7), Toast.LENGTH_SHORT).show();
    }