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'