从两个相互依赖的XML中检索数据

时间:2013-07-24 12:07:59

标签: c# 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中选择了“Author”,我需要检索并显示该行;

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

在c#中执行此操作的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

1)您可以使用下面提到的方法来获取第二个xml的完整的bookdetails列表。 2)之后根据您在1st 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; }
    }

答案 1 :(得分: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; }

}