Xml 避免在topicref中创建子目录的方法
我在xslt代码中有一个非常简单的模板匹配来创建ditamap,只要与原始文档的“节”匹配,就可以创建topicref 初始xml代码片段如下所示:Xml 避免在topicref中创建子目录的方法,xml,xslt,xpath,Xml,Xslt,Xpath,我在xslt代码中有一个非常简单的模板匹配来创建ditamap,只要与原始文档的“节”匹配,就可以创建topicref 初始xml代码片段如下所示: <Section Target="IL27TRM409TueAug251754042009251"> <Heading Target="v5170372">WBG (S-GW/P-GW) chassis </Heading> <xsl:template match="Section> <x
<Section Target="IL27TRM409TueAug251754042009251">
<Heading Target="v5170372">WBG (S-GW/P-GW) chassis </Heading>
<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)底盘
节的xslt模板匹配如下所示:
<Section Target="IL27TRM409TueAug251754042009251">
<Heading Target="v5170372">WBG (S-GW/P-GW) chassis </Heading>
<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>
罗伯特,就@Alejandro的正确回答/评论展开讨论: 创建文件夹的不是XSLT。XSLT已经“忽略”了标题中的
/
:它没有将其视为任何特殊内容。(查看XSLT的输出,您可以看到这一点。)
您在哪个操作系统(或者更确切地说,文件系统)中创建文件?根据这一点,“/”在文件名中可能是非法字符,因此替换另一个字符可能是您唯一的选择。尝试手动命名文件a/b
,看看是否可行。由于您已经在使用normalize-space()
,因此似乎不一定要在文件名中精确保留标题内容
要将-
替换为/
,请修改translate()
表达式,如下所示:
translate(normalize-space($file),' /','_-')
这意味着“为每个空格替换
\uu
,并为每个/
替换-
”XSLT不创建子文件夹,它只将任意数量的XML树作为输入,并将一个(或XSLT2.0中的多个)XML树作为输出。它可能负责序列化,也可能不负责序列化。在这里,输出的使用者理解您的@href
引用了一个子文件夹。为什么不将/
字符替换为URI中的另一个有效字符?