Interesting—I will try using Update—the actual change is a simple modification of attribute values.


The syntax is a bit verbose, but probably still better than XSLT ;·) Examples:

<a>{ (1 to 1000000) ! <b c=''/> }</a> update {
  replace value of node ./b/@c with 'new'
}

<a>{ (1 to 1000000) ! <b c=''/> }</a> update {
  for $b at $p in b/@c
  return replace value of node $b with $p
}

…or, if a database is directly updated:

replace value of node  .//b with 'xyz'