2010-09-14 50 views
0

我正在使用第三方應用程序的Web服務API通過我的Web應用程序搜索數據。如何加入2個來自2個API調用的xml文件?

有一個聯繫人API和一個客戶端API。聯繫人表保存客戶端的ID,但不包含名稱。要搜索並顯示聯繫人並顯示客戶端的名稱,則需要調用這兩個API。

加入兩個結果XML文件的最佳方式是什麼?我正在使用.Net 4.0。

回答

1

我會做它快速和骯髒的:

XDocument 
    .Parse(
     "<bigDoc>" 
     +XDocument.Parse("<a><b/></a>").Root 
     +XDocument.Parse("<c><d/></c>").Root 
     +"</bigDoc>") 

但你可能會碰到各種各樣的名稱空間問題,這將是難以解決的。如下所述,爲什麼不編寫代碼來查詢這兩個文檔?

+0

這將合併文件,不加入他們。聯繫人和客戶端之間沒有聯繫,所以結果不再比單獨的文件更有用。 – Guffa 2010-09-14 13:30:19

+0

API不允許我同時查詢兩者。 – Andrew 2010-09-14 13:32:39

1

最好的方法是根本不加入XML文件,除非您確實需要XML格式的數據。

無法按原樣加入XML文件,因此您必須解析這兩個文件,加入數據,然後從中創建一個新的XML文件。我假設你只是在數據之後,所以最後一步將是過分的。

例如,您可以使用LINQ to XML從XML文件獲取數據並加入它。例如:

XElement contacts = XElement.Parse(contactsXml); 
XElement clients = XElement.Parse(clientsXml); 

var contactsWithClients = 
    from contact in contacts.Elements("Contact") 
    join client in clients.Elements("Client") 
    on contact.Attribute("ClientId").Value equals client.Attribute("Id").Value 
    into grp 
    select new { 
    ContactName = contact.Attribute("Name").Value, 
    ClientName = grp.Single().Attribute("Name").Value 
    }; 
+0

我只能從api獲取xml文件。每個表的一組基本調用,返回xml。 – Andrew 2010-09-14 13:31:57

+0

@Andrew:是的,這不是問題。但是,一旦您解析了XML文件並加入了數據,將數據恢復爲XML格式就毫無意義。 – Guffa 2010-09-14 13:50:17

0

如果是您要調用的Web服務,請確保返回值解析爲類定義而不是普通的舊XML。在客戶端代碼中,定義一個容器類來容納這兩個類。容器類可以根據您的需要進行XML序列化/反序列化,並且生成的XML將被正確地形成。