findAncestorNs function
List<XmlNamespace>
findAncestorNs(
- XmlDocument doc,
- String docSubsetXpath, [
- dynamic namespaceResolver
Implementation
List<XmlNamespace> findAncestorNs(XmlDocument doc, String docSubsetXpath,
[namespaceResolver]) {
final docSubset = XmlXPath.node(doc)
.query(docSubsetXpath); // FIXME: supports namespaceResolver
final result = docSubset.node;
if (result == null) {
return [];
}
final node = result.node;
final ancestorNs = _collectAncestorNamespaces(node);
final ancestorNsWithoutDuplicate = <XmlNamespace>[];
for (final ns in ancestorNs) {
var notOnTheList = true;
for (final ns2 in ancestorNsWithoutDuplicate) {
if (ns2.prefix == ns.prefix) {
notOnTheList = false;
break;
}
}
if (notOnTheList) {
ancestorNsWithoutDuplicate.add(ns);
}
}
final returningNs = <XmlNamespace>[];
final subsetAttributes = node.attributes;
for (var a in ancestorNsWithoutDuplicate) {
var isUnique = true;
for (var b in subsetAttributes) {
var nodeName = b.name.qualified;
if (!nodeName.startsWith('xmlns:')) continue;
final prefix = nodeName.substring(6);
if (prefix == a.prefix) {
isUnique = false;
break;
}
}
if (isUnique) {
returningNs.add(a);
}
}
return returningNs;
}