Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"xi:include/@href[substring(., string-length()-3)='.xml']">
<xsl:attribute name="href">
<xsl:value-of select="concat(substring(.,1, string-length()-3),'dita')"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному XML-документу :
<article
xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Definition</title>
<xi:include href="./introduction.xml"/>
<section xml:id="viewComponents"><title>View Components</title>
<xi:include href="./components/page.xml"/>
<xi:include href="./views/sheet.xml"/>
<xi:include href="./folder/xsubfolders/plaque.xml"/>
</section>
</article>
создает искомое, правильный результат :
<article xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Definition</title>
<xi:include href="./introduction.dita"></xi:include>
<section xml:id="viewComponents">
<title>View Components</title>
<xi:include href="./components/page.dita"></xi:include>
<xi:include href="./views/sheet.dita"></xi:include>
<xi:include href="./folder/xsubfolders/plaque.dita"></xi:include>
</section>
</article>