2013-07-24 67 views
0

檢索數據,這裏是我的問題從兩個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文件,如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)你可以使用下面提到的方法來獲得你的第二個XML的bookdetails的完整列表。 2)然後根據你在第一個XML中做出的選擇來應用一個foreach循環。

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; } 

}