Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="w:w">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kinBetween" match="w:r"
use="concat(generate-id(preceding-sibling::w:r[w:instrText][1]),
'+',
generate-id(following-sibling::w:r
[w:fldChar/@w:fldCharType='end'])
)
"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<t>
<xsl:apply-templates select=
"key('kinBetween',
concat(generate-id(w:r[w:instrText][1]),
'+',
generate-id(w:r[w:fldChar/@w:fldCharType='end'][1])
)
)
"/>
</t>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному вводу (исправлено, чтобы быть правильно сформированным XML-документом):
<t xmlns:w="w:w">
<w:r w:rsidRPr="00ED1487" >
<w:rPr>
<w:i/>
<w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/>
</w:rPr>
<w:instrText xml:space="preserve"> DATE \@ "dddd, MMMM dd, yyyy" \* MERGEFORMAT </w:instrText>
</w:r>
<w:r w:rsidRPr="00ED1487">
<w:rPr>
<w:i/>
<w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r w:rsidRPr="00ED1487">
<w:rPr>
<w:i/>
<w:noProof/>
<w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/>
</w:rPr>
<w:t>Wednesday</w:t>
</w:r>
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>, February 02, 2011</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
</t>
обрабатывает (с шаблоном идентификации, так как никакой специальной обработки не требуется) точно узлы в пределах требуемого интервала и выдает требуемый, правильный результат :
<t xmlns:w="w:w">
<w:r w:rsidRPr="00ED1487">
<w:rPr>
<w:i/>
<w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r w:rsidRPr="00ED1487">
<w:rPr>
<w:i/>
<w:noProof/>
<w:color w:val="E36C0A" w:themeColor="accent6" w:themeShade="BF"/>
</w:rPr>
<w:t>Wednesday</w:t>
</w:r>
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>, February 02, 2011</w:t>
</w:r>
</t>
Объяснение : ключ с именем kinBetween
определен и используется для идентификации всех элементов w:r
между двумя элементами w:r
с необходимыми свойствами для элемента start-interval-element и end-interval-element .