Прежде всего заметим, что дерево, на котором XSLT не работает и не содержит ссылку на символ или сущности, он просто содержит символ Unicode. Для того, чтобы соответствовать, и заменить Unicode символ с элементом можно использовать analyze-string
:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* , node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p//text()">
<xsl:analyze-string select="." regex=" ">
<xsl:matching-substring>
<s/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
Таким образом, входной документ как
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc [
<!ENTITY nbsp " ">
]>
<doc>
<p>This is a paragraph with a non-breaking space before some sub text.</p>
</doc>
преобразуется в результирующий документ
<?xml version="1.0" encoding="UTF-8"?><doc>
<p>This is a paragraph with a non-breaking space <s/> before some sub text.</p>
</doc>
Спасибо .It работает для меня. Можем ли мы сделать то же самое для любого символьного объекта. – user2490093
Вы можете изменить атрибут 'regex'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', Как я уже сказал, эта конструкция соответствует символам, а не ссылкам на сущности или символьным ссылкам. Независимо от того, работает ли исходный вход XML, содержащий ссылку на объект или ссылку на символ, или символ буквально не сохраняется в структуре данных дерева, XSLT работает. –
это очень ясно для меня .. – user2490093