У меня есть XML, как это,XSLT - заменить конкретное содержание узла текста() с новым узлом
<doc>
<p>Biological<sub>89</sub> bases<sub>4456</sub> for<sub>8910</sub> sexual<sub>4456</sub>
differences<sub>8910</sub> in<sub>4456</sub> the brain exist in a wide range of
vertebrate species, including chickens<sub>8910</sub> Recently<sub>8910</sub> the
dogma<sub>8910</sub> of<sub>4456</sub> hormonal dependence for the sexual
differentiation of the brain has been challenged.</p>
</doc>
Как вы можете видеть, что есть <sub>
узлы и text()
узел содержит внутри <p>
узла. и каждый конец <sub>
, есть текстовый узел, начиная с пробела. (например: <sub>89</sub> bases
: здесь перед появлением текста «основания» существует пространство.) Мне нужно заменить эти конкретные пространства узлами.
SO ожидаемый результат должен выглядеть следующим образом,
<doc>
<p>Biological<sub>89</sub><s/>bases<sub>4456</sub><s/>for<sub>8910</sub><s/>sexual<sub>4456</sub>
<s/>differences<sub>8910</sub><s/>in<sub>4456</sub><s/>the brain exist in a wide range of
vertebrate species, including chickens<sub>8910</sub><s/>Recently<sub>8910</sub><s/>the
dogma<sub>8910</sub><s/>of<sub>4456</sub><s/>hormonal dependence for the sexual
differentiation of the brain has been challenged.</p>
</doc>
, чтобы сделать это, я могу использовать регулярные выражения, как это,
<xsl:template match="p/text()">
<xsl:analyze-string select="." regex="( )">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(1)">
<s/>
</xsl:when>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
Но это добавляет <s/>
узлов в каждое пространство в тексте (). Но мне нужно только добавить узлы к этим конкретным пространствам.
Может кто-нибудь предложить мне способ, как я могу это сделать ..