html - 使用 XSLT 将 XML 拆分为多个 HTML 页面?
问题描述
我有一个 XML 文档。我想将这个单个文件转换为多个 HTML 文件。当我在代码ext:document
内部使用时<xsl:template match="page/page">
不起作用我做错了什么?
XML
<root>
<page>
Page 1 INFO
</page>
<page>
Page 2 INFO
<page>
Page 3 INFO
</page>
</page>
<page>
Page 4 INFO
</page>
我的 XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="page">
<ext:document href="page{position()}.html">
<html>
<head></head>
<body><xsl:value-of select="."/></body>
</html>
</ext:document>
</xsl:template>
<xsl:template match="root/page/page">
<ext:document href="pageTwo{position()}.html">
<html>
<head></head>
<body><xsl:value-of select="."/></body>
</html>
</ext:document>
</xsl:template>
</xsl:stylesheet>
至
page1.html
<html>
<head></head>
<body>
Page 1 INFO
</body>
</html>
page2.html
<html>
<head></head>
<body>
Page 2 INFO
</body>
</html>
page3.html
<html>
<head></head>
<body>
Page 3 INFO
</body>
</html>
page4.html
<html>
<head></head>
<body>
Page 4 INFO
</body>
</html>
解决方案
你离得并不远。
看起来您只想要页面元素的文本而不是它的所有子元素(即排除页面节点)?所以你应该选择
./text()
而不是.
在你的value-of
.您希望为所有页面元素递归地应用相同的模板,因此您需要
apply-template
在模板末尾添加一个 for 页面元素。position() 并不是您想要获得唯一编号的内容。相反,您想要计算所有前面和祖先页面元素。
像这样的东西:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="page">
<ext:document href="page{1 + count(ancestor::*[name() = 'page'] | preceding::*[name() = 'page'])}.html">
<html>
<head></head>
<body><xsl:value-of select="./text()"/></body>
</html>
</ext:document>
<xsl:apply-templates select="page"/>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- google-chrome - URL 不会打印到文本文件
- javascript - 字符串连接v JQuery
- java - 交换邮件标题格式
- excel - 从 Excel 中的一个单元格文本字符串中提取一个或两个单元格的经度和纬度
- python - Pytest 使用参数化夹具 VS。pytest.mark.parametrize
- php - 如何使 php 脚本运行插入 sql 查询,然后从插入的行中获取信息?我是初学者
- kubernetes - kubernetes redis cluster master IP 自动更改
- python-3.x - 棘手的python pandas条件数学,在不同的列中有很多缺失的行和可能的重新索引
- ios - Xamarin:更改 UITextView 中自动检测到的链接颜色并保留下划线
- python-3.x - 重命名python列表列表中的重复项