AsxDocument.parse constructor
AsxDocument.parse(
- String documentString
Parses ASX document from a string.
Implementation
factory AsxDocument.parse(String documentString) {
List<AsxEntry> values = [];
final XmlDocument? document = XmlDocument.parse(documentString);
List<XmlElement> entries =
document?.findAllElements('ENTRY').toList() ?? [];
if (entries.isEmpty) {
entries = document?.findAllElements('entry').toList() ?? [];
}
if (entries.isNotEmpty) {
for (XmlElement element in entries) {
String? link;
String? title;
String? author;
String? abstract;
String? copyright;
Banner? banner;
String? baseURL;
String? duration;
String? previewDuration;
String? startTime;
String? endTime;
List<Param> params = [];
String? moreInfo;
StartMarker? startMarker;
EndMarker? endMarker;
// Get Link.
XmlElement? ref = element.getElement("REF");
ref ??= element.getElement("ref");
link = ref?.getAttributeNode("HREF")?.value;
link ??= ref?.getAttributeNode("href")?.value;
if (link == null) {
throw Exception("link can not be parsed");
}
// Get Title.
XmlElement? titleElement = element.getElement("TITLE");
titleElement ??= element.getElement("title");
title = titleElement?.descendants
.where((node) => node is XmlText && node.text.trim().isNotEmpty)
.join('\n');
// Get author.
XmlElement? authorElement = element.getElement("AUTHOR");
authorElement ??= element.getElement("author");
author = authorElement?.descendants
.where((node) => node is XmlText && node.text.trim().isNotEmpty)
.join('\n');
// Get abstract.
XmlElement? abstractElement = element.getElement("ABSTRACT");
abstractElement ??= element.getElement("abstract");
abstract = abstractElement?.descendants
.where((node) => node is XmlText && node.text.trim().isNotEmpty)
.join('\n');
// Get copyright.
XmlElement? copyrightElement = element.getElement("COPYRIGHT");
copyrightElement ??= element.getElement("copyright");
copyright = copyrightElement?.descendants
.where((node) => node is XmlText && node.text.trim().isNotEmpty)
.join('\n');
// Get banner.
banner = _getBanner(element);
// Get baseURL.
XmlElement? baseElement = element.getElement("BASE");
baseElement ??= element.getElement("base");
baseURL = baseElement?.getAttributeNode("HREF")?.value;
baseURL ??= baseElement?.getAttributeNode("href")?.value;
// Get duration.
XmlElement? durationElement = element.getElement("DURATION");
durationElement ??= element.getElement("duration");
duration = durationElement?.getAttributeNode("VALUE")?.value;
duration ??= durationElement?.getAttributeNode("value")?.value;
// Get previewDuration.
XmlElement? previewDurationElement =
element.getElement("PREVIEWDURATION");
previewDurationElement ??= element.getElement("previewduration");
previewDuration =
previewDurationElement?.getAttributeNode("VALUE")?.value;
previewDuration ??=
previewDurationElement?.getAttributeNode("value")?.value;
// Get startTime.
XmlElement? startTimeElement = element.getElement("STARTTIME");
startTimeElement ??= element.getElement("starttime");
startTime = startTimeElement?.getAttributeNode("VALUE")?.value;
startTime ??= startTimeElement?.getAttributeNode("value")?.value;
// Get endTime.
XmlElement? endTimeElement = element.getElement("ENDTIME");
endTimeElement ??= element.getElement("endtime");
endTime = endTimeElement?.getAttributeNode("VALUE")?.value;
endTime ??= endTimeElement?.getAttributeNode("value")?.value;
// Get params.
List<XmlElement> entryParams =
element.findAllElements('PARAM').toList();
if (entryParams.isEmpty) {
entryParams = element.findAllElements('param').toList();
}
if (entryParams.isNotEmpty) {
for (XmlElement paramElement in entryParams) {
Param param = _getParam(paramElement);
params.add(param);
}
}
// Get moreInfo.
XmlElement? moreInfoElement = element.getElement("MOREINFO");
moreInfoElement ??= element.getElement("moreinfo");
moreInfo = moreInfoElement?.getAttributeNode("HREF")?.value;
moreInfo ??= moreInfoElement?.getAttributeNode("href")?.value;
// Get startMarker.
startMarker = _getStartMarker(element);
// Get endMarker.
endMarker = _getEndMarker(element);
values.add(AsxEntry(
link: link,
title: title,
author: author,
abstract: abstract,
copyright: copyright,
banner: banner,
baseURL: baseURL,
duration: duration,
previewDuration: previewDuration,
startTime: startTime,
endTime: endTime,
params: params,
moreInfo: moreInfo,
startMarker: startMarker,
endMarker: endMarker,
));
}
}
return AsxDocument(
entries: values,
);
}