我想用xslt解析epub v3文件的TOC.xhtml。到目前为止,在我的xsl文件中有以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:epub="http://www.idpf.org/2007/ops">
<xsl:template match="/">
<div id="tocItems">
<xsl:apply-templates select="/epub:html/epub:body/epub:nav/epub:ol/epub:li" />
</div>
</xsl:template>
<xsl:template match="epub:li">
<br />
hello
<button class="option" onclick="parent.loadHREF(this)">
<xsl:attribute name="id">
<xsl:value-of select="epub:a/@href" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select='position()' />
</xsl:attribute>
<xsl:value-of select="epub:a" />
</button>
</xsl:template>
</xsl:stylesheet>
不幸的是,这没有给出任何输出。这是一个典型的TOC.xhtml文件,希望有人能帮助。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="tableofcontentsV3.xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
<meta http-equiv="default-style" content="text/html; charset=utf-8"/>
<title>Contents</title>
<link rel="stylesheet" href="css/famouspaintings.css" type="text/css"/>
</head>
<body>
<nav epub:type="toc"><h2>Contents</h2>
<ol epub:type="list"><li><a href="s001-Cover-01.xhtml">Cover</a></li>
<li><a href="s002-BookTitlePage-01.xhtml">Famous Paintings</a></li>
<li><a href="s003-Copyright-01.xhtml">Copyright</a></li>
<li><a href="s004-Section-001.xhtml">Explore</a></li>
<li><a href="s005-Section-002.xhtml">Famous Paintings</a></li>
<li><a href="s018-Section-009.xhtml">Colophon</a></li>
</ol></nav></body>
</html>
您尝试匹配的元素不在epub名称空间中;它们位于XHTML名称空间中。尝试在xsl:stylesheet
中为xhtml名称空间添加前缀,并更改路径中的前缀:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:epub="http://www.idpf.org/2007/ops">
<xsl:template match="/">
<div id="tocItems">
<xsl:apply-templates select="/xhtml:html/xhtml:body/xhtml:nav/xhtml:ol/xhtml:li" />
</div>
</xsl:template>
<xsl:template match="xhtml:li">
<br />
hello
<button class="option" onclick="parent.loadHREF(this)">
<xsl:attribute name="id">
<xsl:value-of select="xhtml:a/@href" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select='position()' />
</xsl:attribute>
<xsl:value-of select="xhtml:a" />
</button>
</xsl:template>
</xsl:stylesheet>