findAncestorNs function

List<XmlNamespace> findAncestorNs(
  1. XmlDocument doc,
  2. String docSubsetXpath, [
  3. 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 subsetNsPrefix = _findNSPrefix(node);
  for (var ancestorNs in ancestorNsWithoutDuplicate) {
    if (ancestorNs.prefix != subsetNsPrefix) {
      returningNs.add(ancestorNs);
    }
  }

  return returningNs;
}