xslt - 如何使用 XSLT 在 toc.ncx 中添加 playOrder?
问题描述
如果我决定在 navmap 中现有 toc.ncx 的开头添加一个 navpoint 元素,则无法重新排序 playOrder 编号,只能手动重新排序。如果有很多导航点元素,那可能真的很乏味。
输入
<?xml version="1.0" encoding="UTF-8"?>
<ncx version="2005-1" xmlns="http://www.daisy.org/z3986/2005/ncx/">
<head>
<meta name="dtb:uid" content="9781315348674" />
<meta name="dtb:depth" content="1" />
<meta name="dtb:totalPageCount" content="144" />
<meta name="dtb:maxPageNumber" content="144" />
</head>
<docTitle>
<text>Making Choices for Health Care</text>
</docTitle>
<navMap>
<navPoint id="nav-1">
<navLabel>
<text>Cover</text>
</navLabel>
<content src="xhtml/A01_cover.xhtml"/>
</navPoint>
<navPoint id="nav-2">
<navLabel>
<text>Half Title</text>
</navLabel>
<content src="xhtml/A02_halftitle.xhtml"/>
</navPoint>
</navMap>
</ncx>
假设输出如下:
<navPoint id="nav-1" playOrder="1">
<navLabel>
<text>1</text>
</navLabel>
<content src="Text/Section0002.xhtml"/>
</navPoint>
<navPoint id="nav-2" playOrder="2">
<navLabel>
<text>2</text>
</navLabel>
<content src="Text/Section0003.xhtml"/>
</navPoint>
XSLT 代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- Recursive copy template -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="navPoint">
<xsl:copy>
<xsl:attribute name="playOrder">1</xsl:attribute>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="@playOrder">
<xsl:attribute name="playOrder"><xsl:number count="*[@playOrder]" level="any"/></xsl:attribute>
</xsl:template>
</xsl:stylesheet>
此代码不起作用,您能告诉我正确的代码吗
解决方案
用这个:
<xsl:attribute name="playOrder"><xsl:number count="navPoint" level="any"/>/xsl:attribute>
代替
<xsl:attribute name="playOrder">1</xsl:attribute>
并删除模板
<xsl:template match="@playOrder">
<xsl:attribute name="playOrder"><xsl:number count="*[@playOrder]" level="any"/></xsl:attribute>
</xsl:template>
推荐阅读
- reactjs - 无法在函数内部设置状态
- react-native - 为什么 react-native-fs 的 readFile 只读取文本文件的一部分?
- r - 复制列但在 R 中删除观察一行
- javascript - 在 Spring MVC 中向控制器发送 javascript 对象列表时出现问题
- flutter - Firestore runTransaction 永远不会运行
- c# - 如何检测游戏对象是在玩家的左侧还是右侧
- python - Kivy 小部件坐标与 collide_point 不正确
- android - 地点 ID 在新地点 API 可能性中返回 null
- azure - 为 cosmos DB 构建散列令牌签名
- javascript - 单击使用 Ajax 接收的锚链接时重新运行功能?