Re[19]: XML. Как прочитать связанные таблицы
От: Аноним  
Дата: 04.06.07 13:58
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:

А>>Может я не так понимаю как отобразить связанные таблицы в XML. Если сохранять их датасетовским методом, то в выходном файле остатся записи о ключах, которые мне не нужны.
S>Таак, теперь пошла уже запись в XML, который до сих пор мы только читали.
S>Постарайся сосредоточиться (крайне рекомендую отказаться от препаратов, искажающих сознание), перечитать свои постинги и 1 (один) раз внятно объяснить, что тебе нужно, а не что ты делаешь. Какие записи? Куда остаются? Зачем тебе отображать что-то куда-то?

Ok, постараюсь.

S> Ты не знаешь, как добавлять констреинты в DataTable.Constraints?

знаю

Начну с самого начала.
В моей клиентской программе отображаются три связанные таблички. Все связи добавлены в DataSet и все работает нормально. Стоит задача — обеспечить возможность экспорта этих табличек в XML(в определенном виде), а также импорта данных из XML файла(который также создан в определенном виде).

Экспорт данных в XML я сделал. Т.к. метод DataSet.WriteXml мне не подошел, потому что требуется определенный вид выходного XML файла, то экспорт пришлось сделать вручную.
Теперь осталось сделать импорт из XML файла с заданной структурой.

Вот такую структуру XML файла от меня требуют:

<?xml version="1.0" encoding="windows-1251"?>
<EXPORT> - это основной нод
    <CODE_TABLE S_INCKEY="1"> - это имя таблицы и проперти в виде имени ключа и его значения
        <CODE>code1</CODE>
        <CREATEDT>23.05.2007 10:15:37</CREATEDT>
                .........
                <ADD_CODE1> - вот здесь начинается перечисление записей ПЕРВОЙ зависимой таблицы которые соответсвуют S_INCKEY="1"
                        .........
                </ADD_CODE1> 
                <ADD_CODE1> - следующая строчка зависимой таблицы и т.д.
                        .........
                </ADD_CODE1> 
                <ADD_CODE1> 
                        .........
                </ADD_CODE1> 
                ... и т.д.

                <ADD_CODE2> - вот здесь начинается перечисление записей ВТОРОЙ зависимой таблицы которые соответсвуют S_INCKEY="1"
                        .........
                </ADD_CODE2> 
                ... и т.д.
        </CODE_TABLE>
        далее идет следующая запись CODE_TABLE, уже с другим ключем (S_INCKEY="2") и т.д.
        ....
</EXPORT>


Такую структуру я сформировал вручную из ДатаСета, в котором отображаются 3 зависимые таблицы.
Теперь надо прочитать такой XML файл и сформировать из него ДатаСет из 3х зависимых таблиц.
Или построчно читать XML файл следующим образом: прочитать запись CODE_TABLE которая соответствует S_INCKEY="1" и добавить ее в базу и так до конца.
Вот именно с этим этапом у меня возникли затруднения.
Re[20]: XML. Как прочитать связанные таблицы
От: Lloyd Россия  
Дата: 04.06.07 14:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Такую структуру я сформировал вручную из ДатаСета, в котором отображаются 3 зависимые таблицы.

А>Теперь надо прочитать такой XML файл и сформировать из него ДатаСет из 3х зависимых таблиц.
А>Или построчно читать XML файл следующим образом: прочитать запись CODE_TABLE которая соответствует S_INCKEY="1" и добавить ее в базу и так до конца.
А>Вот именно с этим этапом у меня возникли затруднения.

Смотри класс XmlDocument. А лучше — написать xslt, который перегонит твой xml в xml, кторый сможет обработать DataSet.ReadXml.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: XML. Как прочитать связанные таблицы
От: Mihas  
Дата: 06.08.08 07:02
Оценка:
Всем привет.
Позвольте поднять тему — у меня схожая проблема.

Eсть xsd-схема:

    <xs:element name="DataSet">
      <xs:complexType>
        <xs:sequence>

          <xs:element name="Table1" >
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Field1" >
                <xs:element name="Field2"   />

                <xs:element name="Table2"  >
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="Field1" />
                      <xs:element name="Field2" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>


Как видно, таблица Table2 "вложена" в Table1.
Когда я загружаю схему в DataSet с помощью ReadXmlSchema, в обеих таблицах автоматически создаются поля Table1_Id и формируется связь Table2.Table1_Id -> Table1.Table1_Id.
Теперь мне нужно как-то научиться управлять созданием этого ключа. Т.е. самому описать в XSD какие именно поля должны связывать таблицы.

Немного поковырявшись, нашел такой способ:
      <xs:unique name="Constrain1">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="@link" />
      </xs:unique>

      <xs:keyref name="Relation1" refer="Constrain1">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="@link_up" />
      </xs:keyref>


Действительно, связь создается. Но и автоматическая при этом не пропадает.

Помогите, плиз, справиться с излишней самостоятельностью десериалайзера.
Re[2]: XML. Как прочитать связанные таблицы
От: Mihas  
Дата: 06.08.08 11:29
Оценка:
Одолел
Всем спасибо за участие
Re: XML. Как прочитать связанные таблицы
От: _Morpheus_  
Дата: 06.08.08 12:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть XML файл, примерно такой:


А>Когда я читаю его методом DataSeta — ReadXML, то получается 2 не связанные таблицы. Но мне необходимо считывать учитывая данные связи. Может это можно сделать вручную?


перед тем как загружать xml, загрузи вначале в датасет схему данных (XSD), где у тебя будет описана связь таблиц...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.