对 xsl:result-文档文件名使用 generate-id() 并链接到 HTML
using generate-id() for xsl:result-document filename and linking to HTML
我正在使用 xslt 将大的 xml 转换为较小的相互链接的 html 文件。我在使用 generate-id() 函数时遇到了麻烦,因为 html href="" 生成的 ID 与文件名
中的 ID 不同
我通过 xsl:result-document 创建以下文件:
index.html | d1e83523.html | d1e83524.html | d1e83525.html | ...
index.html 应包含一个列表,其中包含指向其他 *.html 文件的链接
我想要的 index.html,但我得到的只是不同的 ID:
<ul>
<li><a href="d1e83523.html">Sample 1</a></li>
<li><a href="d1e83524.html">Sample 2</a></li>
<li><a href="d1e83525.html">Sample 3</a></li>
</ul>
xsl 创建 index.html:
<xsl:template match="lab/*">
<xsl:result-document encoding="utf-8" method="html" href="HTML_out/index.html" >
<html>
<head></head>
<body>
<ul>
<xsl:for-each select="chapter/heading">
<li>
<a href="{generate-id()}.html">
<xsl:value-of select="foo"/>
</a>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:result-document>
</xsl:template>
xsl 创建另一个 *.html:
<xsl:template match="chapter/*[not(self::heading)]">
<xsl:for-each select=".">
<xsl:result-document encoding="utf-8" method="html" href="HTML_out/{concat(generate-id(), '.html')}" >
<html>
<head></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
xml-sample(注:后面有多个description类结构元素)
<lab>
<description>
<chapter>
<heading>Example</heading
<operation>other elements</operation>
<operation>other elements</operation>
...
</chapter>
...
</description>
</lab>
我很感激你的帮助!
编辑:我正在使用 generate-id() 为那么多文件获取唯一的文件名
如果您将 <xsl:for-each select="chapter/heading">
更改为 <xsl:for-each select="chapter/*[not(self::heading)]">
,那么您的索引生成会处理与您生成结果文档相同的元素,并且生成的 ID 应该匹配。但是,您需要 运行 同一转换中的两个 XSLT 片段以确保获得相同的 ID,如果您有单独的样式表,则不能保证生成 ID 会提供相同的结果。
我正在使用 xslt 将大的 xml 转换为较小的相互链接的 html 文件。我在使用 generate-id() 函数时遇到了麻烦,因为 html href="" 生成的 ID 与文件名
中的 ID 不同我通过 xsl:result-document 创建以下文件:
index.html | d1e83523.html | d1e83524.html | d1e83525.html | ...
index.html 应包含一个列表,其中包含指向其他 *.html 文件的链接
我想要的
index.html,但我得到的只是不同的 ID:
<ul>
<li><a href="d1e83523.html">Sample 1</a></li>
<li><a href="d1e83524.html">Sample 2</a></li>
<li><a href="d1e83525.html">Sample 3</a></li>
</ul>
xsl 创建 index.html:
<xsl:template match="lab/*">
<xsl:result-document encoding="utf-8" method="html" href="HTML_out/index.html" >
<html>
<head></head>
<body>
<ul>
<xsl:for-each select="chapter/heading">
<li>
<a href="{generate-id()}.html">
<xsl:value-of select="foo"/>
</a>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:result-document>
</xsl:template>
xsl 创建另一个 *.html:
<xsl:template match="chapter/*[not(self::heading)]">
<xsl:for-each select=".">
<xsl:result-document encoding="utf-8" method="html" href="HTML_out/{concat(generate-id(), '.html')}" >
<html>
<head></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
xml-sample(注:后面有多个description类结构元素)
<lab>
<description>
<chapter>
<heading>Example</heading
<operation>other elements</operation>
<operation>other elements</operation>
...
</chapter>
...
</description>
</lab>
我很感激你的帮助!
编辑:我正在使用 generate-id() 为那么多文件获取唯一的文件名
如果您将 <xsl:for-each select="chapter/heading">
更改为 <xsl:for-each select="chapter/*[not(self::heading)]">
,那么您的索引生成会处理与您生成结果文档相同的元素,并且生成的 ID 应该匹配。但是,您需要 运行 同一转换中的两个 XSLT 片段以确保获得相同的 ID,如果您有单独的样式表,则不能保证生成 ID 会提供相同的结果。