避免在topicref中创建子目录的方法

时间:2011-04-18 15:38:05

标签: xml xslt xpath

我在xslt代码中有一个非常简单的模板匹配来创建一个ditamap,它只需在匹配原始文档的“Section”时创建一个topicref即可。

初始xml代码片段如下所示:

<Section Target="IL27TRM409TueAug251754042009251">
<Heading Target="v5170372">WBG (S-GW/P-GW) chassis </Heading>

部分的xslt模板匹配如下:

<xsl:template match="Section> 
 <xsl:variable name="file" select="Heading"/>
 <xsl:variable name="fileName" select="translate(normalize-space($file),' ','_')"/>   
  <topicref format="dita" href="{translate(./$fileName,' ','_')}.xml"  navtitle="{./Heading}">
   <xsl:apply-templates/>
  </topicref>

代码有效,除了上面的标题“WBG(S-GW / P-GW)机箱”之外,它将“/”作为子文件夹,因此它将创建一个名为“WBG”的子转换器(S-GW“然后创建一个文件”P-GW)_chassis.xml“。

有没有办法让xslt忽略标题中的“/”并将其视为一个字符串,只需使用该字符串即可创建一个xml文件?   

1 个答案:

答案 0 :(得分:1)

罗伯特,只是为了扩展@Alejandro的正确答案/评论:

创建文件夹不是XSLT。 XSLT已经“忽略”了标题中的/:它并没有将它视为特殊的东西。 (查看XSLT的输出,您可以看到。)

您在创建文件的操作系统(或更合适的是文件系统)?根据这一点,'/'可能是文件名中的非法字符,因此替换另一个字符可能是您唯一的选择。尝试手动命名文件a/b,看看它是否可行。由于您已经使用normalize-space(),因此您似乎并非绝对需要在文件名中精确保留标题内容。

要将-替换为/,请修改您的translate()表达式,如下所示:

translate(normalize-space($file),' /','_-')

这意味着“为每个空格替换_,并为每个-替换/。”