我在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文件?
答案 0 :(得分:1)
创建文件夹不是XSLT。 XSLT已经“忽略”了标题中的/
:它并没有将它视为特殊的东西。 (查看XSLT的输出,您可以看到。)
您在创建文件的操作系统(或更合适的是文件系统)?根据这一点,'/'可能是文件名中的非法字符,因此替换另一个字符可能是您唯一的选择。尝试手动命名文件a/b
,看看它是否可行。由于您已经使用normalize-space()
,因此您似乎并非绝对需要在文件名中精确保留标题内容。
要将-
替换为/
,请修改您的translate()
表达式,如下所示:
translate(normalize-space($file),' /','_-')
这意味着“为每个空格替换_
,并为每个-
替换/
。”