我正在呼叫以XML格式回傳的 API。
我選擇保留資料XML而不轉換為Json.
我正在接收回傳的資料和instance回傳的每個資料串列。
我有一個基本的 XML 類來從中獲取一條資料。
我需要擴展它以獲取 alat, long和其他一些資料。
是否有像 Quicktype.io 這樣的 XML 自動化服務Json?我找不到一個并且不確定如何構建我的Class
這是我的電話
try{
var response = await client.get(Uri.parse(
'https_call'));
if (response.statusCode == 200) {
final doc = XmlDocument.parse(utf8.decode(response.bodyBytes));
final vehicleActivity = doc
.findAllElements('VehicleActivity')
.map((e) => VehicleActivity.fromElement(e))
.toList();
print(vehicleActivity);
哪些功能。
到目前為止我的課
import 'package:xml/xml.dart';
class VehicleActivity {
VehicleActivity({
this.recordedAtTime,
this.itemIdentifier,
this.validUntilTime,
});
DateTime? recordedAtTime;
String? itemIdentifier;
DateTime? validUntilTime;
factory VehicleActivity.fromElement(XmlElement vaElement) => VehicleActivity(
recordedAtTime: DateTime.parse(
vaElement.findElements('RecordedAtTime').first.text,
),
itemIdentifier: vaElement.findElements('ItemIdentifier').first.text,
validUntilTime: DateTime.parse(
vaElement.findElements('ValidUntilTime').first.text,
),
);
}
回傳的 XML 示例(我需要呼叫 lat、long 和其他一些資料,具體取決于)
<VehicleActivity>
<RecordedAtTime>2022-01-18T14:16:17 00:00</RecordedAtTime>
<ItemIdentifier>f452f348-72f2-4bc4-b7d8-de65e591cf70</ItemIdentifier>
<ValidUntilTime>2022-01-18T14:22:14.063676</ValidUntilTime>
<MonitoredVehicleJourney>
<LineRef>4</LineRef>
<DirectionRef>inbound</DirectionRef>
<FramedVehicleJourneyRef>
<DataFrameRef>2022-01-18</DataFrameRef>
<DatedVehicleJourneyRef>4_20220118_14_15</DatedVehicleJourneyRef>
</FramedVehicleJourneyRef>
<PublishedLineName>4</PublishedLineName>
<OperatorRef>FTVA</OperatorRef>
<DestinationRef>4900801620</DestinationRef>
<VehicleLocation>
<Longitude>-0.720648</Longitude>
<Latitude>51.518651</Latitude>
</VehicleLocation>
<BlockRef>701130</BlockRef>
<VehicleRef>69388</VehicleRef>
</MonitoredVehicleJourney>
<Extensions>
<VehicleJourney>
<Operational>
<TicketMachine>
<TicketMachineServiceCode>B4</TicketMachineServiceCode>
<JourneyCode>1420</JourneyCode>
</TicketMachine>
</Operational>
<VehicleUniqueId>69388</VehicleUniqueId>
<DriverRef>701130</DriverRef>
</VehicleJourney>
</Extensions>
</VehicleActivity>
謝謝
更新已嘗試構建一個用于提取的類Lat,long。錯誤
Exception Happened: Bad state: No element
應該String是Double??我無法獲得雙重功能
import 'package:xml/xml.dart';
class VehicleLocation{
VehicleLocation({
this.latitude,
this.longitude,
});
String? latitude;
String? longitude;
factory VehicleLocation.fromElement(XmlElement vaElement) => VehicleLocation(
latitude: vaElement.findElements('latitude').first.text,
longitude: vaElement.findElements('longitude').first.text,
);
}
經調整的呼叫測驗
final doc = XmlDocument.parse(utf8.decode(response.bodyBytes));
final vehicleActivity = doc
.findAllElements('Latitude')
.map((e) => VehicleLocation.fromElement(e))
.toList();
print(vehicleActivity);
更新#2
I am calling the fetch and then implementing a mapmarker. The future to call and then place the marker is returning issues on vehicleactivity such as
The type 'VehicleActivity' used in the 'for' loop must implement Iterable.
Future<void> showMapMarkers() async {
_unTiltMap();
var vehicleActivity = await fetchLiveLocations();
for (VehicleActivity vehicleActivity in vehicleActivity!) {
GeoCoordinates geoCoordinates = GeoCoordinates (vehicleActivity.latitude, vehicleActivity.latitude);
_addMapMarker(geoCoordinates, 1);
}
}
This same method has worked well for me with different API calls returning Json. Thank you
uj5u.com熱心網友回復:
將您的課程更新為:
class VehicleActivity {
VehicleActivity({
this.recordedAtTime,
this.itemIdentifier,
this.validUntilTime,
this.latitude,
});
DateTime? recordedAtTime;
String? itemIdentifier;
DateTime? validUntilTime;
double? latitude;
factory VehicleActivity.fromElement(XmlElement vaElement) => VehicleActivity(
recordedAtTime: DateTime.parse(
vaElement.findElements('RecordedAtTime').first.text,
),
itemIdentifier: vaElement.findElements('ItemIdentifier').first.text,
validUntilTime: DateTime.parse(
vaElement.findElements('ValidUntilTime').first.text,
),
latitude:
double.tryParse(vaElement.findAllElements('Latitude').first.text),
);
}
請注意,您需要使用findAllElementsbecause Latitudeis inside a tag <VehicleLocation>。同樣,您可以找到VehicleLocation標簽,然后在其中找到緯度/經度標簽。
我認為,如果您格式化 XML(例如在您的 IDE 或瀏覽器中)以傳統方式縮進它,它將幫助您更好地可視化資料。
<VehicleActivity>
<RecordedAtTime>2021-12-03T18:10:01 00:00</RecordedAtTime>
<ItemIdentifier>ad2c7031-ceac-4e7c-bc0c-9e667ad00dfe</ItemIdentifier>
<ValidUntilTime>2021-12-03T18:16:05.408968</ValidUntilTime>
<MonitoredVehicleJourney>
<LineRef>4</LineRef>
<DirectionRef>inbound</DirectionRef>
<FramedVehicleJourneyRef>
<DataFrameRef>2021-12-03</DataFrameRef>
<DatedVehicleJourneyRef>4_20211203_18_04</DatedVehicleJourneyRef>
</FramedVehicleJourneyRef>
<PublishedLineName>4</PublishedLineName>
<OperatorRef>FTVA</OperatorRef>
<DestinationRef>03700324</DestinationRef>
<VehicleLocation>
<Longitude>-0.719601</Longitude>
<Latitude>51.520305</Latitude>
</VehicleLocation>
<Bearing>30.0</Bearing>
<BlockRef>801312</BlockRef>
<VehicleRef>69921</VehicleRef>
</MonitoredVehicleJourney>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/415622.html
標籤:
上一篇:如何匹配父元素中的特定文本-添加具有相同名稱但文本不同的新子元素
下一篇:如何決議xml字串?
