2013-11-02 51 views
0

我有一個XML源讀取,你可能達到的:http://eft.tcmb.gov.tr/bankasubelistesi/bankaSubeTumListe.xmlXML與LinqToXml

我想讀這個XML並將其解析到我的數據庫,但具有LinqToXml

困難,我試過很多方法,但總是descendantselements是空的。我的最後辦法如下:

XDocument xml = XDocument.Load("http://eft.tcmb.gov.tr/bankasubelistesi 
           /bankaSubeTumListe.xml"); 
var sorgu = from x in xml.Descendants("bankaSubeleri"); 
select new {Banka = x.Descendants("banka"), Subeler = x.Descendants("sube")}; 
foreach (var bnk in sorgu) { 
} 

任何幫助將不勝感激。 謝謝!

+0

你絕對應該準備一個XML的簡化版本並將其發佈到此處,而不是僅僅指向g到具有大量數據的外部資源。 – MarcinJuraszek

回答

2

由於您的XML使用命名空間,因此您需要使用XNamespace。

這裏有一個答案的鏈接,說明這口井:

Use Linq to Xml with Xml namespaces

所以,你可以嘗試(未經測試):

XDocument xml = XDocument.Load("http://eft.tcmb.gov.tr/bankasubelistesi 
           /bankaSubeTumListe.xml"); 
XNamespace ns = "http://bs.tcmb.gov.tr/bankaSubeTumListe/"; 
var sorgu = from x in xml.Descendants(ns + "bankaSubeleri"); 
select new {Banka = x.Descendants("banka"), Subeler = x.Descendants("sube")}; 
foreach (var bnk in sorgu) { 
} 

簡化XML:

<bankaSubeTumListe xmlns="http://bs.tcmb.gov.tr/bankaSubeTumListe/" tarih="01/11/2013"> 
<bankaSubeleri bKd="0001" sAdt="25"> 
<banka sonIslemTuru="D" sonIslemZamani="2013-07-10 18:32:00.100"> 
<bKd>0001</bKd> 
<bAd>TÜRKİYE CUMHURİYET MERKEZ BANKASI</bAd> 
<bIlAd>ANKARA</bIlAd> 
<adr>İSTİKLAL CAD. NO:10 06100 ULUS/ANKARA</adr> 
</banka> 
<sube sonIslemTuru="D" sonIslemZamani="2013-07-10 18:32:00.584"> 
<bKd>0001</bKd> 
<sKd>00001</sKd> 
<sAd>ANKARA ŞUBESİ</sAd> 
<sIlKd>006</sIlKd> 
</sube> 
</bankaSubeleri> 
<bankaSubeleri bKd="0004" sAdt="3"> 
<banka sonIslemTuru="D" sonIslemZamani="2013-07-10 18:32:00.100"> 
<bKd>0004</bKd> 
<bAd>İLLER BANKASI A.Ş.</bAd> 
<bIlAd>ANKARA</bIlAd> 
<adr> 
İLLER BANKASI A.Ş BANK.HİZM.DAİ.BŞK.KAT 5 ATATÜRK BULVARI NO:21 OPERA 06053 ULUS/ALTINDAĞ ANKARA 
</adr> 
</banka> 
<sube sonIslemTuru="E" sonIslemZamani="2013-07-11 19:30:00.000"> 
<bKd>0004</bKd> 
<sKd>90001</sKd> 
<sAd>IBAN SUBESI</sAd> 
<sIlKd>999</sIlKd> 
</bankaSubeleri> 
</bankaSubeTumListe> 
+0

它的工作!當我使用相同的命名空間定義爲所有的後代調用。謝謝! – MrGorki