2013-07-24 2 views
0

вот моя проблемаИзвлечение данных из двух XML, который зависит от каждого другого

я получать и отображать данные XML как этот

XDocument doc = XDocument.Load("TextFile1.xml"); 

      List<string> a = new List<string>(); 

      var kitap = doc.Descendants("Author"); 

      foreach (var item in kitap) 
      { 
       a.Add(item.Value); 
      } 
      list1.ItemsSource = a; 

У меня есть два разных файла XML, такие как;

<Books> 
    <Book> 
    <Author>Author1</Author> 
    </Book> 
    <Book> 
    <Author>Author2</Author> 
    </Book> 
</Books> 

И второй подобен этому;

<Books> 
    <Book> 
     <BookName>ExampleBook1</BookName> 
     <Author>Author</Author> 
    </Book> 
    <Book> 
     <BookName>ExampleBook2</BookName> 
     <Author>Author2</Author> 
    </Book> 
    </Books> 

Что теперь мне нужно сделать, это мне нужно, чтобы получить строку в соответствии с первым файлом XML, если «Автор» выбран в первом XML, мне нужно извлекать и отображать эту строку;

<Book> 
      <BookName>ExampleBook1</BookName> 
      <Author>Author</Author> 
     </Book> 

Каков наилучший способ сделать это в C#?

+0

Использование LINQ для запроса как XML –

+0

Можете ли вы привести пример? Я знаю, что делать, просто не знаю, как это сделать :) –

ответ

2

1) Вы можете использовать нижеуказанный метод, чтобы получить полный список bookdetails вашего второго xml. 2) После этого применить цикл foreach в соответствии с вашим выбором, сделанным в 1-м XML.

public List<BookDetails> GetBookDetails() 
     { 
      XDocument xDOC = XDocument.Load("FilePath"); 
      List<BookDetails> bookdet = (from xele in xDOC.Descendants("Book") 
             select new BookDetails 
             { 
              BookName = (string)xele.Element("BookName"), 
              Author = (string)xele.Element("Author") 
             }).ToList<BookDetails>(); 
      return bookdet; 
     } 

public class BookDetails 
    { 
     public string BookName { get; set; } 
     public string Author { get; set; } 
    } 
+0

Да, это похоже на работу. Я также попробовал item.Parent.Descendants («BookName»). Выберите (o => o.Value), который тоже работал. Но мой немного более крутой. Спасибо :) –

1

Просто введите код. XDocument doc = XDocument.Load ("XMLFile1.xml");

 List<Books> a = new List<Books>(); 

     var kitap = doc.Descendants("Author"); 

     foreach (var item in kitap) 
     { 
      a.Add(new Books {AuthorName = item.Value, BookName = ""}); 
     } 

     XDocument doc1 = XDocument.Load("XMLFile2.xml"); 

     List<Books> b = new List<Books>(); 

     var kitauthor = doc1.Descendants("Book").Where(i => i.Element("Author").Value == a[1].AuthorName).FirstOrDefault(); 

И

public class Books 
{ 
    public string AuthorName { get; set; } 

    public string BookName { get; set; } 

} 
Смежные вопросы