Могу ли я обнулить целое число в сгенерированном XSD классе? - PullRequest
1 голос
/ 04 октября 2010

Вот ситуация: у меня есть клиент, который выдал мне схему XML, и мое программное обеспечение преобразует их записи с разделителями табуляции в XML.

Одно из этих полей, "file-sequence", вводится в схеме как целое число. Однако клиент клиента (цель интеграции) хочет, чтобы это целое число было дополнено нулями и содержало 4 цифры (EG, <file-sequence>0001</file-sequence>) в фактическом выходном XML.

Я выводлю с использованием сериализации, которая хороша, автоматична и безболезненна. Однако, поскольку в XSD это поле введено как целое число, поле последовательности файлов выглядит как <file-sequence>1</file-sequence>. Что имеет смысл. :)

Пока что я сузил потенциальные ответы до трех вариантов:

  1. Отредактируйте схему и измените тип на строку. Обнулить порядковый номер при обновлении поля. Недостаток: я должен помнить, чтобы делать это в любое время, когда цель интеграции изменяет схему (поскольку они уже около полдюжины раз).

  2. Откажитесь от использования XML-сериализации, вручную создав XML в коде. Недостаток: большая работа, возможно, подверженная ошибкам, серьезный запах кода (для меня).

  3. Сериализация в поток в памяти, извлечение из него необработанного XML, добавление туда целого числа. Недостатки: чувствует себя очень грязно, все еще много работы.

Есть ли другие варианты? Если нет, какой вариант здесь является правильным способом сделать это? (Я думаю, что вариант 1, вероятно, самый чистый.)

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Честно говоря, вариант 1 является единственным реальным вариантом.Если цель заботится о количестве символов в строке, то поле не является целым числом;это строка, которая ограничена только цифрами.

0 голосов
/ 04 октября 2010

Существуют различные варианты того, что, как я понимаю, вы подразумеваете под вариантом 1, которые могут дать вам то, что вы ищете.Моя первая реакция состоит в том, чтобы определить интересующий тип данных как целое число с ограничением , в частности, одно в соответствии с

xsd:integer {minLength = '4' maxLength = '4'}

Если это неудовлетворительно, возможно, регулярное выражение

xsd:string {pattern = ...}

поможет.

...