XSLT转XML为HTML时脚注引入多余空白的解决问询
解决XSLT转换混合XML时damage与note间的多余空白问题
针对你遇到的tei:damage与tei:note相邻时出现多余换行空白的问题,可通过以下几种精准方案解决:
方法一:全局过滤无意义纯空白文本节点
添加模板匹配所有仅包含空白的文本节点(可排除需要保留空白的父元素,比如段落),直接忽略这类无意义空白:
<!-- 忽略所有纯空白文本节点 --> <xsl:template match="text()[normalize-space(.) = '']"/> <!-- 若需保留特定元素(如tei:p)内的空白,调整为: --> <!-- <xsl:template match="text()[normalize-space(.) = '' and not(parent::tei:p)]"/> -->
该方法简单高效,但需测试确认不会影响其他需要保留空白的内容排版。
方法二:精准处理damage与note相邻时的空白节点
仅针对tei:damage和tei:note前后的空白节点进行忽略,不影响其他元素间的空白:
<!-- 忽略damage后紧跟note时的中间空白 --> <xsl:template match="text()[normalize-space(.) = '' and preceding-sibling::tei:damage and following-sibling::tei:note]"/> <!-- 忽略note后紧跟damage时的中间空白 --> <xsl:template match="text()[normalize-space(.) = '' and preceding-sibling::tei:note and following-sibling::tei:damage]"/>
方法三:结合strip-space与preserve-space指令
在样式表顶部添加指令,指定剥离damage和note元素相关的空白,同时保留需要空白的元素:
<xsl:strip-space elements="tei:damage tei:note"/> <!-- 保留需要空白的元素,比如段落 --> <xsl:preserve-space elements="tei:p"/>
注意:若damage元素内的文本需要保留有效空格,需结合你原有的normalize-space模板处理其内容,避免剥离内部空白。
补充说明
处理混合内容时,务必区分有意义空白(如段落内的单词间隔)和无意义空白(如XML元素间的换行缩进),根据实际需求选择方案。你的原有damage模板可继续保留,配合上述方案即可解决note与damage间的多余空格问题。
内容的提问来源于stack exchange,提问作者medievalmatt
相关产品推荐
相关产品推荐

