Converter a formatação em linha OOXML para um elemento mesclado
No OOXML, formatação como negrito, itálico etc. pode ser (e geralmente é irritantemente) dividida entre vários elementos, da seguinte forma:
<w:p>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve">This is a </w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve">bold </w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
<w:i/>
</w:rPr>
<w:t>with a bit of italic</w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t>paragr</w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t>a</w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t>ph</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"> with some non-bold in it too.</w:t>
</w:r>
</w:p>
Preciso combinar esses elementos de formatação para produzir isso:
<p><b>This is a mostly bold <i>with a bit of italic</i> paragraph</b> with some non-bold in it too.</p>
Minha abordagem inicial seria escrever a tag de formatação inicial quando for encontrada pela primeira vez usando:
<xsl:text disable-output-escaping="yes"><b></xsl:text>
E depois que eu processar cada<w:r>
, verifique o próximo para ver se a formatação ainda está presente. Caso contrário, adicione a tag final da mesma forma que adiciono a tag start. Continuo pensando que deve haver uma maneira melhor de fazer isso e ficaria grato por todas as sugestõe
Deve mencionar também que estou vinculado ao XSLT 1.
O motivo dessa necessidade é que precisamos comparar um arquivo XML antes de ser transformado em OOXML e depois de ser transformado em OOXML. As tags de formatação extras fazem parecer que foram feitas alterações quando não era