2013-07-24 66 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; } 

}