abid zahid Ответов: 1

Как читать вложенный XML в одном плоском объекте


Всем привет,
Я должен прочитать вложенный xml и сохранить в БД, но проблема в том, что xml вложен и должен сохранить в одной таблице, когда я читаю его с помощью метода dataset.readxml() он возвращает несколько таблиц, но я одна таблица есть ли способ сделать это? я хочу получить такой результат

автор | контакт | книга | Цена
тест |155335852| abc | 152
тест |155335852| xyz | 1523

пример xml

<bookinfo>
  <author>
   <name>test</name>
   <contact>155335852</contact>
  </author>
 <books>
  <book>
   <title>abc</book>
   <price>152</price>
 </book>
 <book>
  <title>xyz</book>
  <price>1523</price>
  </book>
 </books>
</bookinfo>



Примечание: xml является динамическим, и необходимые теги будут поступать из предварительно определенных тегов в базе данных.
и я хочу сохранить этот вид вложенного xml в одной таблице, поэтому мне просто нужно решение для чтения xml в одном datatable или списке объектов.

Что я уже пробовал:

я попробовал DataSet.ReadXml(); но он возвращает несколько таблиц, и из-за динамического xml я не могу присоединиться к ним во время выполнения.

1 Ответов

Рейтинг:
1

Dirk Bahle

Вы можете сделать это различными способами В C#, но вы, вероятно, хотите реализовать IXmlSerializable на каждый объект:

public interface IXmlSerializable
{
  XmlSchema GetSchema ();
  void ReadXml ( XmlReader reader );
  void WriteXml ( XmlWriter writer );
}


..и каскадировать процесс от корня к основанию. Реализация интерфейса дает вам очень мелкозернистый способ управления/отладки процесса. Вы можете использовать либо:

- XMLSerializer или (это предпочтительный и лучший инструмент)
- DataContractSerializer

Код для этого слишком сложен, чтобы размещать его здесь. Но вы должны искать решения, которые сериализуют древовидные или многодеревовидные (графовые) структуры, и вы должны найти несколько примеров, которые дадут вам более подробное представление об этом.


Dirk Bahle

DataContractSerializer-это лучшее решение, так как он намного новее и т. д... (просто для ясности)

abid zahid

спасибо за помощь, если вы можете привести какой-то пример кода, это было бы более заметно.