По умолчанию DataSet предполагает схему, основанную на элементах, а не атрибутах. Вам нужно создать xsd для ваших данных, чтобы DataSet правильно прочитал этот XML.
Из-за того, как сконструирован этот XML, нет простого способа записать это в DataSet напрямую. Вам нужно будет использовать xsd.exe для создания файла xsd, а затем отредактировать его вручную с соответствующими атрибутами из пространства имен msdata. Это довольно болезненный процесс.
Вы можете преобразовать документ в форму, которая, вероятно, будет правильно анализироваться в DataSet, либо переписав XML с использованием LINQ, либо применив XslCompiledTransform :
<products>
<product id="1">
<photo addr="1.jpg" />
<parameter name="name" />
</product>
</products>
Вы также можете использовать LINQ to XML вместо того, чтобы пытаться использовать DataSet:
var productsInfo = from product in productsElement.Descendants("product")
from photo in product.Descendants("photo")
from parameter in product.Descendants("parameter")
let id = product.Attribute("id")
let addr = photo.Attribute("addr")
let name = parameter.Attribute("name")
select new { ID = id.Value, Addr = addr.Value, Name = name.Value};
Если вы разрабатываете новый макет XML, а не работаете с существующим, вы можете сначала создать DataSet с помощью конструктора. Заполните его фиктивными данными, затем вы можете использовать WriteXml , чтобы получить схему xsd и пример данных. Чтобы сохранить Relationshps в выходном XML-файле, обязательно задайте для свойства Nested ваших отношений значение true (см. Вложенность DataRelations (ADO.NET) ).