Перебор поставщиков DataSet - PullRequest
1 голос
/ 30 июля 2009

У меня есть XML-документ, как показано ниже:

<?xml version="1.0" encoding="utf-8" ?>
 <Providers>
    <Provider>
      <ProviderType>Email</ProviderType>
      <ProviderTitle>MyProviderTitle</ProviderTitle>
       <DeliveryRules>
          <PersonalDelivery>true</PersonalDelivery>
       </DeliveryRules>
      <ProviderConfiguration>
    <SendTo>
      <Address>myEmailAddress</Address>
      <Address>myEmailAddress</Address>
    </SendTo>
  </ProviderConfiguration>
</Provider>
    <Provider>
      <ProviderType>Email</ProviderType>
      <ProviderTitle>MyProviderTitle</ProviderTitle>
       <DeliveryRules>
          <PersonalDelivery>true</PersonalDelivery>
       </DeliveryRules>
      <ProviderConfiguration>
    <SendTo>
      <Address>myEmailAddress</Address>
      <Address>myEmailAddress</Address>
    </SendTo>
  </ProviderConfiguration>
</Provider>
</Providers>

Теперь, когда я извлекаю это в набор данных, используя:

 DataSet dsConfiguration = new DataSet();
 dsConfiguration.ReadXml("myfile.xml"));

Как я могу перебирать поставщиков?

Ответы [ 2 ]

1 голос
/ 30 июля 2009

Когда дело доходит до более иерархических данных, вам гораздо лучше десериализовать в строго типизированный граф объектов.

Вот очень быстрая реализация, которая должна работать для вашего примера документа:

[XmlType("Providers")]
public class Providers : List<Provider> { }

public class Provider
{
    public string ProviderType { get; set; }
    public string ProviderTitle { get; set; }
    public DeliveryRules DeliveryRules { get; set; }
    public ProviderConfiguration ProviderConfiguration { get; set; }
}

public class DeliveryRules
{
    public bool PersonalDelivery { get; set; }
}

public class ProviderConfiguration
{
    [XmlArrayItem("Address")]
    public string[] SendTo { get; set; }
}

public static void Main()
{
    var serializer = new XmlSerializer(typeof (Providers));
    Providers providers;
    using (var stream = File.OpenRead("myfile.xml"))
    {
        providers = (Providers) serializer.Deserialize(stream);
    }
    foreach (var provider in providers)
    {
        Console.WriteLine(provider.ProviderTitle);
        foreach (var address in provider.ProviderConfiguration.SendTo)
        {
            Console.WriteLine("\t" + address);
        }
    }
}

Очевидно, что этот подход требует больше сантехнических работ, но если вы можете получить XSD, который описывает формат вашего документа, то вы можете автоматически сгенерировать все ваши классы, используя инструмент XSD.exe .

1 голос
/ 30 июля 2009
foreach (var Provider in dsConfiguration.Tables["Provider"].Rows)
{
    // your code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...