Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 20.08.03 19:53
Оценка:
И так, смысл вот в чем:
Имеется запись в xml вида:



<string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />

Она полностью соответствует схеме. Далее мы загружаем этот xml в
datagrid таким путем:


            this.ResultDocument.DataSet.ReadXmlSchema(@"xsd\result.xsd");
      this.ResultDocument.Load(destFileName);
      this.dataGrid1.DataSource = this.ResultDocument.DataSet.Tables["string"];


Дописываем строчку и сохраняем это дело на hdd, путем

      this.ResultDocument.Save(типа_имя_файла);


Получаем на выходе:

<string fullname="сюда и далее вписать данные" unit="и сюда">
</string>

Что понятно схеме уже не соответствует, и вообще криво и некрасиво.

Как это можно побороть?
... << RSDN@Home 1.1 beta 1 >>

25.12.03 11:28: Перенесено модератором из '.NET' — AVK
Re: Сопряжение DataGrid и XML (XmlDataDocument)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.03 22:12
Оценка:
Здравствуйте, DMach, Вы писали:

А зачем все так сложно? Почему просто не читать и писать данные средствами самого датасета? В смысле DataSet.WriteXml/DataSet.ReadXml...
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 21.08.03 13:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А зачем все так сложно? Почему просто не читать и писать данные средствами самого датасета? В смысле DataSet.WriteXml/DataSet.ReadXml...


По всей видимости из-за:

Public Events
NodeChanged (inherited from XmlDocument) Occurs when the Value of a node belonging to this document has been changed.
NodeChanging (inherited from XmlDocument) Occurs when the Value of a node belonging to this document is about to be changed.
NodeInserted (inherited from XmlDocument) Occurs when a node belonging to this document has been inserted into another node.
NodeInserting (inherited from XmlDocument) Occurs when a node belonging to this document is about to be inserted into another node.
NodeRemoved (inherited from XmlDocument) Occurs when a node belonging to this document has been removed from its parent.
NodeRemoving (inherited from XmlDocument)
или
SelectNodes (inherited from XmlNode

И для других вещей мне удобнее использовать XmlDataDocument. В принципе можно просто изменить xsd и все будет нормально (работать будет), но уж больно это плохо выглядит...
... << RSDN@Home 1.1 beta 1 >>
Re: Сопряжение DataGrid и XML (XmlDataDocument)
От: Аноним  
Дата: 21.08.03 13:50
Оценка:
Здравствуйте, DMach, Вы писали:

DM>    <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />


DM>  <string fullname="сюда и далее вписать данные" unit="и сюда">
DM>  </string>


DM> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А в чем разница, и в чем заключается несоответствие схеме?
Re[2]: Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 21.08.03 14:02
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, DMach, Вы писали:


    <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />


  <string fullname="сюда и далее вписать данные" unit="и сюда">
  </string>


DM>> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А>А в чем разница, и в чем заключается несоответствие схеме?


Разница в том, что второй вариант по всей видимости имеет InnerText равный \n или еще какой-то чепухе типа того.
Да в основном это можно было бы игнорировать, но уж больно криво смотрится, нарушается эстетика А это значит, что элемент имеет тип и пошло поехало. Но главное — не красиво
... << RSDN@Home 1.1 beta 1 >>
Re: Сопряжение DataGrid и XML (XmlDataDocument)
От: mihailik Украина  
Дата: 21.08.03 14:47
Оценка:
DM> <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />

DM>Она полностью соответствует схеме. Далее мы загружаем этот xml в datagrid


DM>Получаем на выходе:

DM> <string fullname="сюда и далее вписать данные" unit="и сюда">
DM> </string>

DM> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А в чём состоит несоответствие схеме? Насколько я могу догадаться, fullname — это строка, и unit — строка. Вообще, DataSet поддерживает не все примочки схем. Возможно, у тебя тип данных unit — это какое-то перечисление. Но в таблицах ADO.NET нет возможности задать тип "перечисление".
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 21.08.03 16:08
Оценка:
Здравствуйте, mihailik, Вы писали:

DM>> <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />


DM>> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


M>А в чём состоит несоответствие схеме? Насколько я могу догадаться, fullname — это строка, и unit — строка. Вообще, DataSet поддерживает не все примочки схем.


XmlValidatingReader
Тем не менее его хватает, что бы вылетать по исключению

<?xml version="1.0" standalone="yes"?>
<xs:schema id="root" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="root" msdata:IsDataSet="true" msdata:Locale="ru-RU">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="string">
<xs:complexType>
<xs:attribute name="fullname" type="xs:string" use="required" />
<xs:attribute name="unit" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>


M> Возможно, у тебя тип данных unit — это какое-то перечисление. Но в таблицах ADO.NET нет возможности задать тип "перечисление".


Вообще-то проблема не в том, что бы не вылетало. Можно схему поправить и все будет работать как надо. Проблема в том, что некрасиво

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<root>
<string fullname="абракадабра" unit="типа опа" />
<string fullname="типа опа" unit="го">
</string>
</root>
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 21.08.03 16:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, DMach, Вы писали:


А>
DM>>    <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />
А>


А>
DM>>  <string fullname="сюда и далее вписать данные" unit="и сюда">
DM>>  </string>
А>


DM>> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А>А в чем разница, и в чем заключается несоответствие схеме?


Разница в том, что в InnerText данного элемента стоит 00 0D 00 0A 00 20 00 20 00 Кто его просил там быть?
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Сопряжение DataGrid и XML (XmlDataDocument)
От: Аноним  
Дата: 22.08.03 04:33
Оценка:
Здравствуйте, DMach, Вы писали:

А>>
DM>>>    <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />
А>>


А>>
DM>>>  <string fullname="сюда и далее вписать данные" unit="и сюда">
DM>>>  </string>
А>>


DM>>> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А>>А в чем разница, и в чем заключается несоответствие схеме?


DM>Разница в том, что в InnerText данного элемента стоит 00 0D 00 0A 00 20 00 20 00 Кто его просил там быть?


Это ignorable whitespace — данных там нет. Первый и второй варианты идентичны.

Что же касается эстетики, то тут ничего не попишешь...
Re[4]: Сопряжение DataGrid и XML (XmlDataDocument)
От: DMach Россия http://www.1Gb.ru
Дата: 23.08.03 17:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, DMach, Вы писали:


А>>>
DM>>>>    <string fullname="Припой ПОС 61 0023-00-00-000 21931-76" unit="кг" />
А>>>


А>>>
DM>>>>  <string fullname="сюда и далее вписать данные" unit="и сюда">
DM>>>>  </string>
А>>>


DM>>>> Что понятно схеме уже не соответствует, и вообще криво и некрасиво.


А>>>А в чем разница, и в чем заключается несоответствие схеме?


DM>>Разница в том, что в InnerText данного элемента стоит 00 0D 00 0A 00 20 00 20 00 Кто его просил там быть?


А>Это ignorable whitespace — данных там нет. Первый и второй варианты идентичны.


А>Что же касается эстетики, то тут ничего не попишешь...


Оказалось, что попиешь... Если отказаться от использования doc.Save("file") и использовать doc.DataSet.WriteXml("file") то все нормально и васякие там ignorable whitespace и в некоторых вариантах левые атрибуты не создаются и все нормально. То есть мы получаем разный файл в результате этих методов
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Сопряжение DataGrid и XML (XmlDataDocument)
От: mihailik Украина  
Дата: 26.08.03 07:38
Оценка:
DM>Вообще-то проблема не в том, что бы не вылетало. Можно схему поправить и все будет работать как надо. Проблема в том, что некрасиво

Тогда имеет смысл взять .NET Reflector и посмотреть в исходниках, как там DataSet пишется в XML.

Если они явно вставляют начало/конец элемента, то без пост-обработки XML не обойтись. А если это какой-нибудь промежуточный XmlWriter делает, можно попытаться его переопределить.

Хотя проще всего-таки забить. Добро пожаловать в мир Микрософта
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.