【问题标题】:XML reading with LinqToXml使用 LinqToXml 读取 XML
【发布时间】:2013-11-02 23:44:26
【问题描述】:

我有一个 xml 源,您可以通过以下方式找到它:http://eft.tcmb.gov.tr/bankasubelistesi/bankaSubeTumListe.xml

我想阅读这个 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) {
 }

任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 您绝对应该准备一个简化版的 XML 并将其发布在这里,而不是仅仅指向具有大量数据的外部资源。

标签: xml linq-to-xml xmldocument xelement


【解决方案1】:

由于您的 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>

【讨论】:

  • 成功了!!当我对所有后代调用使用相同的命名空间定义时.. 谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2012-11-04
  • 2016-05-30
  • 2011-06-29
相关资源
最近更新 更多