Проверка DTD # Обязательное поле и пустая строка - PullRequest
0 голосов
/ 07 мая 2019

Я делаю проверку XML в нашей системе, и я уже достиг этого через XmlReader, но я хочу проверить атрибут #Required со значением EMPTY STRING. Есть ли способ достичь этого в атрибуте DTD?

DTD:

<!ATTLIST TEST
   pUsername CDATA #REQUIRED (...SHOULD NOT BE AN EMPTY STRING)
   pTestAttrib CDATA #REQUIRED (...SHOULD NOT BE AN EMPTY STRING)
   >

XML:

<TEST pUsername="" pTestAttrib=""> (I want to validate if this attribute value is empty string)

C #: псевдокод

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += delegate (object sender, ValidationEventArgs args) { messageBuilder.AppendLine(args.Message); };
settings.ValidationType = ValidationType.DTD;
settings.DtdProcessing = DtdProcessing.Parse;
using (XmlReader reader = XmlReader.Create(stream, settings))
{
    do
    {
    }
    while (reader.Read());
}

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете объявить атрибуты как NMTOKEN или NMTOKENS , но значения для этих атрибутов должны состоять только из NameChar.

Не уверен, сработает ли это для всех возможных значений, поступающих от сторонней системы, или нет.

Если нет, вы застряли в том, что касается изменений DTD.

...