0

私は xml を初めて使用し、次の例のような xml を使用して Web ページをループする必要があります。各要素を保存する必要がありますか? xml を変数に変換して、一意の ID ごとに行を持つリストを作成できるようにします。id: 101、説明: Auto、名前: Bon Bon、通り: 123 W Place St、州など ID は属性になると思いますか? 残りの値はinnerxmlですか?

Web で情報を検索してきましたが、あまり成果を上げることができませんでした。スタートが遅いので、どんな助けでも大歓迎です。

 <Master>
   <Dealers>
     <Dealer id="101">
       <Description>Auto</Description>
       <Name>Bon Bon Motors</Name>
       <Address>
         <Street>123 W Place St</Street>
         <City>Chicago</City>
         <State>IL</State>
         <Zip>82453</Zip>
       </Address>
       <PhoneNo>5451252222</PhoneNo>
     </Dealer> 
     <Dealer id-"102">
      ...
      ...
      ...
     </Dealer>
   </Dealers>
 </Master>


 XmlDocument doc = new XmlDocument();
 doc.Load("http://data.xml");
 XmlElement root = doc.DocumentElement;
 List<SomeType> list1 = new List<SomeType>();
 if (root.HasAttribute("id"))
 {
      foreach (.... )
      { 
          int pk = root.Attributes["id"].Value;
          string description = ...
          string name ...

          list1.Add(pk);
          list1.Add(description);
          ....
      }
 }
4

4 に答える 4

3
static void Main(string[] args)
{
    var xml = @"<Master>
                    <Dealers>
                        <Dealer id=""101"">
                        <Description>Auto</Description>
                        <Name>Bon Bon Motors</Name>
                        <Address>
                            <Street>123 W Place St</Street>
                            <City>Chicago</City>
                            <State>IL</State>
                            <Zip>82453</Zip>
                        </Address>
                        <PhoneNo>5451252222</PhoneNo>
                        </Dealer> 
                        <Dealer id=""102"">
                        <Description>Auto</Description>
                        <Name>Bon Bon Motors</Name>
                        <Address>
                            <Street>123 W Place St</Street>
                            <City>Chicago</City>
                            <State>IL</State>
                            <Zip>82453</Zip>
                        </Address>
                        <PhoneNo>5451252222</PhoneNo>
                        </Dealer>
                    <Dealer id=""103"">
                        <Description>Auto</Description>
                        <Name>Bon Bon Motors</Name>
                        <Address>
                            <Street>123 W Place St</Street>
                            <City>Chicago</City>
                            <State>IL</State>
                            <Zip>82453</Zip>
                        </Address>
                        <PhoneNo>5451252222</PhoneNo>
                        </Dealer> 
                    </Dealers>
                    </Master>";

    var results = XDocument.Parse(xml).Root // Master
                           .Descendants("Dealer")
                           .Select(dealer => new
                               {
                                   Id = dealer.Attribute("id").Value,
                                   Description = dealer.Element("Description").Value,
                                   Name = dealer.Element("Name").Value,
                                   Street = String.Join(", ", dealer.Element("Address")
                                                                   .Elements() // Street, City, State, Zip
                                                                   .Select(element => element.Value)
                                                                   .ToArray())
                               }).ToList();

    results.ForEach(result => Console.WriteLine("Id: {0}; Description: {1}; Name: {2}; Address: {3}", 
                                            result.Id, result.Description, result.Name, result.Street));

    Console.Read();
}

コンソールに出力します:

Id: 101; Description: Auto; Name: Bon Bon Motors; Address: 123 W Place St, Chicago, IL, 82453   
Id: 102; Description: Auto; Name: Bon Bon Motors; Address: 123 W Place St, Chicago, IL, 82453
Id: 103; Description: Auto; Name: Bon Bon Motors; Address: 123 W Place St, Chicago, IL, 82453
于 2013-06-25T04:03:12.113 に答える
1

これは、よりLINQ化された単純化されたアプローチです。私はちょうどそれを書いて、i varをテストしました

        var xmlDocument = XDocument.Load("C:\\TEMP\\test.xml");
        var nodesList = from xmlNode in xmlDocument.Descendants("Dealer")
                        select
                            new
                                {
                                    Id = xmlNode.Attribute("id").Value,
                                    Description = xmlNode.Descendants("Description").ElementAt(0).Value,
                                    Name = xmlNode.Descendants("Name").ElementAt(0).Value,
                                    Address = new
                                        {
                                            Street = xmlNode.Descendants("Address").Descendants("Street").ElementAt(0).Value,
                                            City = xmlNode.Descendants("Address").Descendants("City").ElementAt(0).Value,
                                            State = xmlNode.Descendants("Address").Descendants("State").ElementAt(0).Value,
                                            ZipCode = xmlNode.Descendants("Address").Descendants("Zip").ElementAt(0).Value
                                        },
                                    PhoneNumber = xmlNode.Descendants("PhoneNo").ElementAt(0).Value
                                }           
            ;

        foreach (var node in nodesList)
        {
            Console.WriteLine(node.Id);
        }

        Console.ReadKey();
于 2013-06-25T04:04:23.397 に答える
1

これはあなたがしようとしていることのようなものです:

class Program
{
    static void Main(string[] args)
    {
        var doc = new XmlDocument();
        doc.Load(@"..\..\input.xml");

        var container = doc.DocumentElement
            .GetElementsByTagName("Dealers")
            .OfType<XmlElement>()
            .FirstOrDefault();

        if (container == null) return;

        var dealers = container
            .GetElementsByTagName("Dealer")
            .OfType<XmlElement>();

        foreach (var dealer in dealers)
        {
            var dealerId = dealer.GetAttribute("id");
            Console.Write(dealerId + " - ");

            var descrip = dealer.GetElementsByTagName("Description").OfType<XmlElement>().FirstOrDefault();
            if (descrip != null)
                Console.WriteLine(descrip.InnerText);

            // etc...
        }
        Console.ReadLine();
    }
}
于 2013-06-25T03:02:33.403 に答える