Список вида <дата и время> убывание

Обновление: OP отредактировал вопрос, чтобы удалить использование xs:assert и заявил в комментариях, что валидация должна иметь место на C #. Ответ на вопрос OP теперь становится следующим:

Вы не можете принудительно применять ограничение, которое изменяет необходимость элемента на основе значения атрибута с использованием XSD 1.0, а Microsoft не поддерживает XSD 1.1, поэтому вы должны либо отключить ваши ограничения или проверить их вне вашего XSD.


Оригинальный ответ XSD 1.1

(Сохранен для будущих читателей)

Вы близки, но ваше утверждение

      <xs:assert test="count(./PackageArg[@type eq 'Batch']) eq 1"/>

проверяет @type на PackageArg, когда оно должно проверяться на @Type на Application.

Следующий XSD проверит ваш XML и выполнит ваши зависимые от атрибута требования:

XSD 1.1

<?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"
           vc:minVersion="1.1">
  <xs:element name="Applications">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Application" maxOccurs="unbounded" minOccurs="1">
          <xs:complexType>
            <xs:all>
              <xs:element type="xs:string" name="ProjectDirName"/>
              <xs:element type="xs:string" name="Project" minOccurs="0"/>
              <xs:element type="xs:string" name="Version" minOccurs="0"/>
              <xs:element type="xs:string" name="PackageArg" minOccurs="0"/>
              <xs:element type="xs:string" name="OutputDirName"/>
            </xs:all>
            <xs:attribute type="xs:string" name="Name" use="optional"/>
            <xs:attribute name="Type" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="Web"/>
                  <xs:enumeration value="Batch"/>
                  <xs:enumeration value="Service"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:assert test="PackageArg or @Type != 'Batch'"/>
            <xs:assert test="Version or @Type != 'Service'"/>
            <xs:assert test="Project or not(@Type = 'Web' or @Type = 'Service')"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Имейте в виду, что Microsoft не поддерживает XSD 1.1. (Вы отметили свой вопрос «msxml»).

44
задан Chris Conway 29 October 2008 в 04:02
поделиться

3 ответа

Хотя это не тестируется...

docs.Sort((x, y) => y.StoredDate.CompareTo(x.StoredDate));

должна быть противоположность того, что Вы первоначально имели.

77
ответ дан Austin Salonen 23 September 2019 в 11:02
поделиться
docs.Sort((x, y) => y.StoredDate.CompareTo(x.StoredDate));

Должен сделать то, что Вы ищете.

20
ответ дан jonnii 23 September 2019 в 11:02
поделиться
docs.Sort((x, y) => -x.StoredDate.CompareTo(y.StoredDate));

Примечание знак "минус".

6
ответ дан Tamas Czinege 23 September 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: