toXml method
String
toXml({
- KeyValueBuilderDef? keyBuilder,
- KeyValueBuilderDef? listItemBuilder,
- int indent = 0,
- bool includeMetaData = true,
- String metaDataKey = TSDefaults.metaDataKey,
Implementation
String toXml({
KeyValueBuilderDef? keyBuilder,
KeyValueBuilderDef? listItemBuilder,
int indent = 0,
bool includeMetaData = true,
String metaDataKey = TSDefaults.metaDataKey,
}) {
if (!includeMetaData) {
remove(metaDataKey);
}
keyBuilder ??= (key, value) => key.toPascalCase();
final buffer = StringBuffer();
final prefix = ' ' * indent;
for (final entry in entries) {
final rawKey = entry.key.toString();
final key = keyBuilder(rawKey, entry.value);
final value = entry.value;
if (value is Map) {
buffer.writeln('$prefix<$key>');
buffer.write(
value.toXml(
keyBuilder: keyBuilder,
listItemBuilder: listItemBuilder,
indent: indent + 1,
includeMetaData: includeMetaData,
metaDataKey: metaDataKey,
),
);
buffer.writeln('$prefix</$key>');
} else if (value is List) {
buffer.writeln('$prefix<$key>');
for (final item in value) {
if (item is Map) {
buffer.write(
item.toXml(
keyBuilder: keyBuilder,
listItemBuilder: listItemBuilder,
indent: indent + 2,
includeMetaData: includeMetaData,
metaDataKey: metaDataKey,
),
);
} else {
buffer.writeln(
'$prefix ${listItemBuilder?.call(rawKey, item) ?? '- $item'}',
);
}
}
buffer.writeln('$prefix</$key>');
} else if (value == null) {
buffer.writeln('$prefix<$key/>');
} else {
buffer.writeln('$prefix<$key>$value</$key>');
}
}
return buffer.toString();
}