Как проверить пустой тег строкового значения в xsd - PullRequest
6 голосов
/ 14 февраля 2010

У меня есть XML-файл, содержащий некоторые значения даты и другие типы данных.

<Purchasedate Name="purcaseDate" value=""/>

Я проверяю эти xml-файлы с помощью xsd-файла. В xsd shcema я написал шаблон регулярного выражения для формата dd/mm/yyyy.

Это работает нормально, если значение атрибута имеет значение. Мой шаблон проверяется на соответствие атрибуту значения.

Поле (purchasedate) не является обязательным. если значение = "", это означает, что мой шаблон также проверяется на наличие пустой строки, что не является обязательным.

Мне нужно проверить необязательное поле и я использую <xs:attribute name="PurchaseDate" use="optional"> также.

Мне нужно проверить это поле, когда значение тега не пусто.

Ответы [ 4 ]

9 голосов
/ 15 февраля 2010

Это слишком просто ..

Все, что вам нужно сделать, это включить спецификацию пустой строки в ваш pattern

Это способ сделать это .. <xs:pattern value="|(Regular_pattern_goes_here)"/>

Для справки я написал примеры кусков кодов ... просто пройдите их ..

образец XML:

<?xml version="1.0" encoding="utf-8"?>
<xmln xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com XMLFile1.xsd" xmlns="http://www.xsdef.com/xml/123">
  <Purchasedate Name="purcaseDate" value=""/>
</xmln>

образец XSD: (включает пользовательский тип def)

<xs:schema xmlns:xsLocal="http://www.xsdef.com/xml/123" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xsdef.com/xml/123" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="xmln">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Purchasedate">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="Name" type="xs:string" use="required" />
                <xs:attribute name="value" type="xsLocal:CUSTOM_DATE" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="CUSTOM_DATE">
    <xs:restriction base="xs:string">
      <xs:pattern value="|((01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)/(01|02|03|04|05|06|07|08|09|10|11|12)/[1-2][0-9][0-9][0-9])"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
0 голосов
/ 30 декабря 2011

Если вы контролируете синтаксис XML, вам следует рассмотреть определение элемента следующим образом.Поскольку XML-схема уже предоставляет тип даты, вы должны использовать его, если у вас нет веских причин.Я говорю это потому, что другим будет проще использовать xml, а вам позже - более удобные рамки кода.Я не включил атрибут «имя», потому что он казался избыточным для имени элемента.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="Purchasedate" nillable="true" type="xs:date"/>
<xs:element name="Purchasedate2">
    <xs:complexType>
        <xs:attribute name="value" type="xs:date"/>
    </xs:complexType>
</xs:element>
<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Purchasedate"/>
            <xs:element minOccurs="0" ref="Purchasedate2"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

0 голосов
/ 29 декабря 2011

'?' Символ в регулярном выражении означает, что символ перед ним должен встречаться 0 или 1 раз.

Итак, чтобы решить вашу проблему, вам нужно заключить регулярное выражение в скобки и поставить вопросительный знак в конце:

  <xs:simpleType name="PurchaseDateType">
    <xs:restriction base="xs:string">
      <xs:pattern value="(Regular_pattern_goes_here)?"/>
    </xs:restriction>
  </xs:simpleType>

Используйте этот тип на вашем поле, и с вами все будет в порядке

0 голосов
/ 14 февраля 2010

попробуйте добавить этот атрибут nillable = "true" в определение тега xml Также вы можете взглянуть на его ссылку http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
Best Reagds,
Йордан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...