Para um único arquivo, a seguinte folha de estilo XSLT fará o trabalho:
<t:transform version="1.0" xmlns:t="http://www.w3.org/1999/XSL/Transform">
<t:template match="node()|@*">
<t:copy>
<t:apply-templates select="node()|@*"/>
</t:copy>
</t:template>
<t:template match="image/@alt[. = 'blah blah']">
<t:attribute name="alt" select="normalize-space(../caption)"/>
</t:template>
</t:transform>
Para processar vários arquivos, você pode invocar a folha de estilos várias vezes a partir de algum script de shell, script Ant ou similar (ou consultar xmlsh) ou, se estiver usando um processador XSLT 2.0 como Saxon, pode criar scripts dentro do próprio XSLT usando a função collection ()