namespace method

void namespace(
  1. String uri,
  2. [String? prefix]
)

Binds a namespace prefix to the provided uri. The prefix can be omitted to declare a default namespace. Throws an ArgumentError if the prefix is invalid or conflicts with an existing declaration.

Implementation

void namespace(String uri, [String? prefix]) {
  if (prefix == ns.xmlns || prefix == ns.xml) {
    throw ArgumentError('The "$prefix" prefix cannot be bound.');
  }
  if (optimizeNamespaces &&
      _stack.any((builder) =>
          builder.namespaces.containsKey(uri) &&
          builder.namespaces[uri]!.prefix == prefix)) {
    // Namespace prefix already correctly specified in an ancestor.
    return;
  }
  if (_stack.last.namespaces.values.any((meta) => meta.prefix == prefix)) {
    throw ArgumentError(
        'The "$prefix" prefix conflicts with existing binding.');
  }
  final meta = NamespaceData(prefix, false);
  _stack.last.attributes
      .add(XmlAttribute(meta.name, uri, XmlAttributeType.DOUBLE_QUOTE));
  _stack.last.namespaces[uri] = meta;
}