Если я решу добавить элемент navpoint в toc.ncx в начале существующего toc.ncx в navmap, я не могу изменить порядок номера playOrder, кроме как вручную. Это может быть очень утомительно, если есть много элементов navpoint.
Введите
<?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>
Этот код не работает, и можете ли вы сказать мне правильный код