Prism.js在NiceGUI中无法实现XML语言代码高亮的问题求助
解决NiceGUI中Prism XML代码高亮失效问题
问题根源
XML代码中的<和>未被转义为<和>,被浏览器当作HTML标签解析,导致Prism无法识别XML语法结构。同时你当前使用的Prism CSS(1.5.0)和JS(1.23.0)版本不一致,可能引发兼容性问题。
解决方案
1. 统一Prism版本并确保XML语言支持
将CSS和JS换成相同版本,推荐使用匹配的稳定版,同时可额外引入XML组件确保语法支持:
ui.add_head_html('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/themes/prism.min.css"/>') ui.add_body_html('<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/prism.min.js"></script>') # 可选:单独引入XML语言组件,确保语法识别 ui.add_body_html('<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/components/prism-xml.min.js"></script>')
2. 手动转义XML特殊字符
使用Python标准库html模块转义XML中的<、>等特殊字符,再通过Prism代码块渲染:
import html # 原始XML代码 xml_content = """<root> <user name="admin"> <email>admin@example.com</email> </user> </root>""" # 转义特殊字符 escaped_xml = html.escape(xml_content) # 渲染带Prism类的代码块 ui.html(f'<pre><code class="language-xml">{escaped_xml}</code></pre>')
3. 触发Prism重新高亮(动态场景)
如果XML代码是动态加载的,需要手动调用Prism的高亮方法确保生效:
# 在代码渲染完成后执行 ui.run_javascript('Prism.highlightAll()')
内容的提问来源于stack exchange,提问作者Phuoc Phan
相关产品推荐
相关产品推荐

