Я пытаюсь запустить XSLT на приведенном ниже XML, чтобы обернуть текст между определенными PI с новым элементом:
Ввод XML:
<doc>
<p>
<?addition?>hello<?addition?> text1
</p>
<p>text2</p>
<p>
<?addition?>bye<?addition?> text2
</p>
</doc>
Я пытается обернуть текст между addition-start
и addition-end
в элементе <u>
, как показано ниже.
Желаемый вывод:
<doc>
<p>
<u>hello</u> text1
</p>
<p>text2</p>
<p>
<u>bye</u> text2
</p>
</doc>
Мой текущий XSLT неправильно захватывает текстовые узлы, которые не являются промежуточными элементами PI, текущая таблица стилей:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="#all"
version="2.0">
<xsl:template
match="@* | node()">
<xsl:copy
copy-namespaces="no"
exclude-result-prefixes="#all"
inherit-namespaces="no">
<xsl:apply-templates
select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//p/text()[preceding::processing-instruction('addition')]
[following::processing-instruction('addition')]">
<u><xsl:value-of select="." /></u>
</xsl:template>
</xsl:stylesheet>
Есть ли способ настроить мой XSLT для достижения этой цели и обернуть только текст, окруженный PI, <u>
?