我正在使用第三方應用程序的Web服務API通過我的Web應用程序搜索數據。如何加入2個來自2個API調用的xml文件?
有一個聯繫人API和一個客戶端API。聯繫人表保存客戶端的ID,但不包含名稱。要搜索並顯示聯繫人並顯示客戶端的名稱,則需要調用這兩個API。
加入兩個結果XML文件的最佳方式是什麼?我正在使用.Net 4.0。
我正在使用第三方應用程序的Web服務API通過我的Web應用程序搜索數據。如何加入2個來自2個API調用的xml文件?
有一個聯繫人API和一個客戶端API。聯繫人表保存客戶端的ID,但不包含名稱。要搜索並顯示聯繫人並顯示客戶端的名稱,則需要調用這兩個API。
加入兩個結果XML文件的最佳方式是什麼?我正在使用.Net 4.0。
我會做它快速和骯髒的:
XDocument
.Parse(
"<bigDoc>"
+XDocument.Parse("<a><b/></a>").Root
+XDocument.Parse("<c><d/></c>").Root
+"</bigDoc>")
但你可能會碰到各種各樣的名稱空間問題,這將是難以解決的。如下所述,爲什麼不編寫代碼來查詢這兩個文檔?
最好的方法是根本不加入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
};
如果是您要調用的Web服務,請確保返回值解析爲類定義而不是普通的舊XML。在客戶端代碼中,定義一個容器類來容納這兩個類。容器類可以根據您的需要進行XML序列化/反序列化,並且生成的XML將被正確地形成。
這將合併文件,不加入他們。聯繫人和客戶端之間沒有聯繫,所以結果不再比單獨的文件更有用。 – Guffa 2010-09-14 13:30:19
API不允許我同時查詢兩者。 – Andrew 2010-09-14 13:32:39