Then we look at any <text> child of <svg> than has the strings
'element' or 'phase'...

<xsl:template match="svg:text[.=('element','phase')]">

We recreate the <text> child here...

<text>

... including all its attributes ...

<xsl:copy-of select="@*"/>

And here's where I get lost, and it's the critical part.

<xsl:value-of select="key(.,../@id,doc('textsrc.xml'))"/>

Use the key corresponding to the node we're in ... and the @id of this
node's parent ...
and I can see the example in the XSLT 2.0 CR that this is emulating,
but I'm just not understanding the roll of that third element in the
key function. Obviously, that's where it's getting the other data and
dropping it in.