跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

XSLT转换XML教程 如何使用XSLT将XML转换为HTML

XSLT 转换 XML 到 HTML 需处理器、命名空间匹配、模板优先级和输出方法协同;现代浏览器禁用内联 XSLT,须用工具链或本地 HTTP 服务;命名空间、模板选择、输出转义等细节极易出错。 XSLT 转换 XML 到 HTML 不是“运行一个命令”就能完事的事,它依赖处理器、命名空间匹配、模板优先级和输出方法三者协同;没配对好,浏览器直接空白或报错
XTDE0420
。 浏览器里用
xsl:stylesheet
直接渲染 XML?别试了 现代浏览器(Chrome/Firefox/Edge)已默认禁用内联 XSLT 处理,XML 文件里写
大概率静默失败,连控制台都不报错。这不是你 XSL 写错了,是浏览器策略变了。 本地开发时,必须用支持 XSLT 的工具链:比如
saxon
命令行、VS Code 的
XML Tools
插件、或 Node.js 的
xslt-process
若坚持在浏览器调试,得起一个本地 HTTP 服务(
npx http-server
),且确保响应头
Content-Type: text/xml
和 XSL 文件可跨域访问
必须显式声明,否则默认输出
xml
,浏览器会当纯文本渲染,看不到结构
xsl:template match
匹配不到元素?先查命名空间 XML 带命名空间(比如
xmlns="http://example.com/ns"
)却没在 XSLT 里声明前缀,
match="/root"
就永远不生效——XSLT 把无前缀的
root
当作“无命名空间”,而实际元素属于那个 URI。 在
根节点加
xmlns:ns="http://example.com/ns"
,然后模板写成
match="/ns:root"
如果 XML 命名空间是默认(无前缀),XSLT 中不能用空前缀匹配,必须用
match="*[local-name()='root']"
这类兜底写法(但性能差,仅应急) 用
@xml:lang
这类带前缀的属性需对应声明
xmlns:xml="http://www.w3.org/XML/1998/namespace"
选哪个?看数据驱动逻辑
是过程式遍历,
是声明式分发——后者才是 XSLT 的设计本意,也更容易维护。 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 立即学习 “ 前端免费学习笔记(深入) ”; 用
适合简单平铺,但无法复用模板、不能自然处理嵌套层级变化 用
后,每个
item
会按
match
规则自动找对应模板,父子结构、条件分支都更清晰 常见坑:
不带
select
时,默认处理所有子节点(包括文本节点),常导致多余空格或换行出现在 HTML 中,建议明确写
select="*"
或用
输出 HTML 时样式和脚本不生效?检查
disable-output-escaping
想让 XSLT 输出
被浏览器执行,而不是显示为文字,必须用
disable-output-escaping="yes"
,但这个开关有代价。 只对
生效,且仅影响该节点内容,不是全局设置 误用会导致 XSS 风险(比如把用户输入直接
disable-output-escaping
),生产环境应严格过滤 HTML5 自闭合标签(如

)在
method="html"
下会被自动补全为
,无需手动写斜杠;但若用
method="xml"
,就必须写全
,否则解析失败 最麻烦的从来不是语法,而是 XML 命名空间和 XSLT 处理器版本差异——Saxon 10 默认用 XPath 3.1,而 libxslt(Linux 系统常用)只到 XPath 1.0,
replace()
map
这些函数一用就报错
XPST0017
。动手前,先
saxon -version
xsltproc --version
看清手里的刀是什么型号。

相关文章