2011-06-24 14 views
11

Tôi có tệp xml này.C# XMLreader và các nút con

  <movies> 
      <movie> 
       <score>8.582207</score> 
       <popularity>3</popularity> 
       <translated>true</translated> 
       <adult>false</adult> 
       <language>en</language> 
       <original_name>Transformers</original_name> 
       <name>Transformers</name> 
       <alternative_name>The Transformers</alternative_name> 
       <type>movie</type> 
       <id>1858</id> 
       <imdb_id>tt0418279</imdb_id> 
       <url>http://www.themoviedb.org/movie/1858<;/url> 
       <votes>28</votes> 
       <rating>7.2</rating> 
       <certification>PG-13</certification> 
       <overview>The Earth is caught in the middle of an intergalactic war /overview> 
       <released>2007-07-04</released> 
       <images> 
        <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-original.jpg" size="original" id="4bc91347017a3c57fe007304"/> 
        <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-mid.jpg" size="mid" id="4bc91347017a3c57fe007304"/> 
        <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-cover.jpg" size="cover" id="4bc91347017a3c57fe007304"/> 
        <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-thumb.jpg" size="thumb" id="4bc91347017a3c57fe007304"/> 
        <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-original.jpg" size="original" id="4bc9133s9017a3c57fe0072ce"/> 
        <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-poster.jpg" size="poster" id="4bc91339017a3c57fe0072ce"/> 
        <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-thumb.jpg" size="thumb" id="4bc91339017a3c57fe0072ce"/> 
       </images> 
      <last_modified_at>2010-04-26 03:26:14</last_modified_at> 
     </movie> 
    </movies> 

Tôi đọc tất cả các thuộc tính bằng cách sử dụng

textReader.ReadToFollowing("original_name"); 
string title =textReader.ReadElementContentAsString("original_name",textReader.NamespaceURI); 

Tuy nhiên, bất cứ điều gì tôi cố gắng tôi không thể quản lý để đọc các nút con của "hình ảnh".

+0

Bạn có thể xem LINQ to XML. Tôi thấy dễ sử dụng hơn khi đọc/tạo XML. – m4tt1mus

Trả lời

23

Bạn nên đọc tới phần tử <images>, sau đó đọc cho <image> hậu duệ đầu tiên, và sau đó đọc cho các anh chị em tiếp theo cho đến khi bạn không thể nữa. Mã dưới đây cho thấy cách này có thể được thực hiện.

public class StackOverflow_6473251 
{ 
    public static void Test() 
    { 
     string xml = @"    <movies> 
      <movie> 
       <score>8.582207</score> 
       <popularity>3</popularity> 
       <translated>true</translated> 
       <adult>false</adult> 
       <language>en</language> 
       <original_name>Transformers</original_name> 
       <name>Transformers</name> 
       <alternative_name>The Transformers</alternative_name> 
       <type>movie</type> 
       <id>1858</id> 
       <imdb_id>tt0418279</imdb_id> 
       <url>http://www.themoviedb.org/movie/1858</url> 
       <votes>28</votes> 
       <rating>7.2</rating> 
       <certification>PG-13</certification> 
       <overview>The Earth is caught in the middle of an intergalactic war /overview> 
       <released>2007-07-04</released> 
       <images> 
        <image type=""poster"" url=""http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-original.jpg"" size=""original"" id=""4bc91347017a3c57fe007304""/> 
        <image type=""poster"" url=""http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-mid.jpg"" size=""mid"" id=""4bc91347017a3c57fe007304""/> 
        <image type=""poster"" url=""http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-cover.jpg"" size=""cover"" id=""4bc91347017a3c57fe007304""/> 
        <image type=""poster"" url=""http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-thumb.jpg"" size=""thumb"" id=""4bc91347017a3c57fe007304""/> 
        <image type=""backdrop"" url=""http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-original.jpg"" size=""original"" id=""4bc9133s9017a3c57fe0072ce""/> 
        <image type=""backdrop"" url=""http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-poster.jpg"" size=""poster"" id=""4bc91339017a3c57fe0072ce""/> 
        <image type=""backdrop"" url=""http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-thumb.jpg"" size=""thumb"" id=""4bc91339017a3c57fe0072ce""/> 
       </images> 
      <last_modified_at>2010-04-26 03:26:14</last_modified_at> 
     </movie> 
    </movies>"; 
     XmlReader r = XmlReader.Create(new StringReader(xml)); 
     r.ReadToFollowing("original_name"); 
     string title = r.ReadElementContentAsString("original_name", r.NamespaceURI); 
     r.ReadToFollowing("images"); 
     int imageCount = 0; 
     if (r.ReadToDescendant("image")) 
     { 
      do 
      { 
       Console.WriteLine("Image {0}", ++imageCount); 
       Console.WriteLine(" Type: {0}", r.GetAttribute("type")); 
       Console.WriteLine(" URL: {0}", r.GetAttribute("url")); 
       Console.WriteLine(" Size: {0}", r.GetAttribute("size")); 
       Console.WriteLine(" ID: {0}", r.GetAttribute("id")); 
      } while (r.ReadToNextSibling("image")); 
     } 
    } 
} 
+0

Cảm ơn rất nhiều. Làm việc hoàn hảo – k787

+0

Làm thế nào để bạn quay trở lại tổ tiên và tiếp tục với phần tử 'last_modified_at'? – Shimmy

+0

Điều này làm việc cho tôi. Nhưng tôi đến đây để sử dụng với xmlreader trong khi thực hiện một khối cấu hình tùy chỉnh. Không thể không cảm thấy rằng tôi không nên làm những điều theo cách này nữa, không chắc chắn nếu những người khác có thể đề nghị lựa chọn thay thế tuy nhiên .... –

-3

Hãy thử cách sử dụng các đối tượng:

XmlDocument xml = new XmlDocument(); 
XmlNodeList nodes = xml.ChildNodes; 
XmlNode node = nodes[0]; 
XmlNode childNode = node.ChildNodes[0]; 
+4

Sẽ có hiệu suất rất kém nếu tài liệu lớn. XMLReader thường là lựa chọn đúng. –