Merhaba. Merkez bankasının günlük kur değerlerini xml olarak alıyorum. Daha sonra toGData() ile çevirip kullanmak istiyorum ama verinin alt kısımlara erişemiyorum. Direk json veri çektiğim zaman sıkıntısız yapabiliyordum ama xml ile ilk denemem. Bu yüzden beceremedim. Aşağıya xml, json çıktılarını ve diğer kodlarımı da ekledim.
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
<Tarih_Date Tarih="22.01.2021" Date="01/22/2021" Bulten_No="2021/15" >
<Currency CrossOrder="0" Kod="USD" CurrencyCode="USD">
<Unit>1</Unit>
<Isim>ABD DOLARI</Isim>
<CurrencyName>US DOLLAR</CurrencyName>
<ForexBuying>7.3985</ForexBuying>
<ForexSelling>7.4118</ForexSelling>
<BanknoteBuying>7.3933</BanknoteBuying>
<BanknoteSelling>7.4229</BanknoteSelling>
<CrossRateUSD/>
<CrossRateOther/>
</Currency>
<Currency CrossOrder="1" Kod="AUD" CurrencyCode="AUD">
<Unit>1</Unit>
<Isim>AVUSTRALYA DOLARI</Isim>
<CurrencyName>AUSTRALIAN DOLLAR</CurrencyName>
<ForexBuying>5.7021</ForexBuying>
<ForexSelling>5.7392</ForexSelling>
<BanknoteBuying>5.6758</BanknoteBuying>
<BanknoteSelling>5.7737</BanknoteSelling>
<CrossRateUSD>1.2945</CrossRateUSD>
<CrossRateOther/>
</Currency>
...
</Tarih_Date>
JSON (getKur.dart içinde print(data) ile getirdiğimde çıktı )
{type: text/xsl, href: isokur.xsl,
Tarih_Date: {
Tarih: 22.01.2021,
Date: 01/22/2021,
Bulten_No: 2021/15,
Currency: [
{
CrossOrder: 0,
Kod: USD,
CurrencyCode: USD,
Unit: {$t: 1},
Isim: {$t: ABD DOLARI},
CurrencyName: {$t: US DOLLAR},
ForexBuying: {$t: 7.3985},
ForexSelling: {$t: 7.4118},
BanknoteBuying: {$t: 7.3933},
BanknoteSelling: {$t: 7.4229},
CrossRateUSD: {},
CrossRateOther: {}
},
{
CrossOrder: 1,
Kod: AUD,
CurrencyCode:
AUD,
Unit: {$t: 1},
Isim: {$t: AVUSTRALYA DOLARI},
CurrencyName: {$t: AUSTRALIAN DOLLAR},
ForexBuying: {$t: 5.7021},
ForexSelling: {$t: 5.7392},
BanknoteBuying: {$t: 5.6758},
BanknoteSelling: {$t: 5.7737},
CrossRateUSD: {$t: 1.2945},
CrossRateOther: {}
},
...
]
}
}
getKur.dart
Future<List<Kur>> getKur() async{
final Xml2Json xml2json = new Xml2Json();
final response = await http.get("https://www.tcmb.gov.tr/kurlar/today.xml");
xml2json.parse(response.body);
final jsondata = xml2json.toGData();
final data = json.decode(jsondata);
print(data);
if(response.statusCode==200){
return (jsonDecode(data) as List).map((sendData){
return Kur.fromJson(sendData);
}).toList();
}else{
throw Exception('data error');
}
}
kur.dart
class Kur{
final String CrossOrder;
final String Kod;
final String Isim;
Kur({this.CrossOrder, this.Kod, this.Isim});
factory Kur.fromJson(Map<String, dynamic> json){
return Kur(
CrossOrder: json['CrossOrder'],
Kod: json['Kod'],
Isim: json['Isim']);
}
}
main.dart
class _MainPageState extends State<MainPage> {
Future<List<Kur>> kur;
@override
void initState() {
// TODO: implement initState
super.initState();
kur = getKur();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Data Uygulaması'),
centerTitle: true,
),
body: FutureBuilder<List<Kur>>(
future: kur,
builder: (context, data) {
if (data.hasData) {
return ListView.builder(
itemCount: data.data.length,
itemBuilder: (context, index) {
return Card(
color: Colors.blue[200],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: InkWell(
onTap: () {
print('Tıklandı');
},
child: Column(
children: [
ListTile(
leading: Icon(Icons.kur, size: 60),
title: Text(data.data[index].CrossOrder),
subtitle: Text(data.data[index].id.toString()),
),
],
),
),
);
});
} else if (data.hasError) {
return Text(data.error);
}
return CircularProgressIndicator();
},
),
),
);
}
}