canonicalizeXml static method
Implementation
static String canonicalizeXml(String xmlString) {
final document = XmlDocument.parse(xmlString);
// Recursively sort attributes and format the nodes
String normalizeNode(XmlNode node) {
if (node is XmlElement) {
final sortedAttributes =
node.attributes.toList()
..sort((a, b) => a.name.toString().compareTo(b.name.toString()));
final buffer = StringBuffer();
buffer.write('<${node.name}');
for (var attr in sortedAttributes) {
buffer.write(' ${attr.name}="${attr.value}"');
}
buffer.write('>');
for (var child in node.children) {
buffer.write(normalizeNode(child));
}
buffer.write('</${node.name}>');
return buffer.toString();
} else if (node is XmlText) {
return node.value;
} else if (node is XmlProcessing) {
// Skip XML declaration
return '';
} else {
return node.toXmlString();
}
}
final normalizedXml = normalizeNode(document.rootElement);
return normalizedXml;
}