Преобразование XML со смешанными элементами сложного типа в DataSets и другие ограничения DataSet - PullRequest
0 голосов
/ 11 ноября 2009

Это вопрос из двух частей. Первый - это конкретный вопрос о DataSets и XML. Второй - более общий вопрос типа «я правильно понимаю». Хотя я, безусловно, буду благодарен за ответы, которые отвечают на оба вопроса, я также приветствую ответы, которые касаются только одного или другого!

Вопрос 1

Поддерживает ли класс DataSet элементы смешанного сложного типа ? Например, допустим, у меня есть следующий XML:

<cars>
   <car id="1">10000
     <colour>blue</colour>
     <doors>4</doors>
   </car>
</cars>

XSD, описывающий этот XML, будет иметь сложный тип с атрибутом «mixed», установленным в true. Это позволяет мне указывать стоимость моей машины (10 000 долларов США) в виде обычного текста, а затем любые другие элементы, которые мне нужны.

Однако, когда я преобразовываю этот XML в DataSet и возвращаюсь снова, используя следующий код:

StringReader sr = new StringReader(xml);
DataSet dataset = new DataSet();
dataset.ReadXml(sr);
sr.Close();

StringWriter sw = new StringWriter();
dataset.WriteXml(sw);
xml = sw.ToString();
sw.Close();

Тогда полученный XML выглядит следующим образом:

<cars>
   <car id="1">
     <colour>blue</colour>
    <doors>4</doors>
  </car>
</cars>

т.е. значение "10000" пропадает.

Это происходит не только в том случае, если у меня есть вызов ReadXml (), который выводит схему XML (как указано выше), но также если я предоставляю XSD (например, путем вызова ReadXmlSchema ()).

Есть ли способ избежать этого? Или я должен просто избегать смешанных типов?

Вопрос 2

Существуют ли какие-либо другие ограничения, такие как описанные выше, о которых мне следует знать при преобразовании XML в наборы данных и наоборот?

Или, возможно, Вопрос 1 показывает, что я иду в обратном порядке. На данный момент я начинаю с желаемого XML (например, с примерами автомобилей выше) и преобразую его в DataSet. Цель состоит в том, чтобы сохранить данные в виде XML в базе данных, и когда я захочу отобразить эти данные в WinForm, я преобразую XML в DataSet и буду использовать привязку данных к различным таблицам в DataSet. Но вместо того, чтобы начинать с XSD, возможно, мне следует сначала определить свои данные как (типизированный) DataSet, а затем позволить методам ReadXml / WriteXml позаботиться о том, как выглядит XML?

1 Ответ

0 голосов
/ 13 ноября 2009

Спасибо за все ответы. ;)

Видя, что никто не смог помочь, я подумал, что попытаюсь ответить на свой вопрос:

Вопрос 1 - элементы смешанного типа просто не разрешены классом DataSet. Единственное подтверждение, которое я смог найти по этому вопросу, кроме моего собственного тестирования, это это сообщение на форуме MSDN , где менеджер программы ADO.NET пишет: «Такое поведение разработано - DataSet не поддерживает смешанный контент XML /XSD."

Вопрос 2 - Это демонстрирует опасность, если начинать с XML / XSD и пытаться преобразовать его в DataSet. Это привело к тому, что мы переосмыслили наш подход с целью сначала начать с DataSet и позволить ему извлекать формат XML, а не наоборот.

(Чужие мысли все еще приветствуются!)

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