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

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

我在xslt代码中有一个非常简单的模板匹配来创建ditamap,只要与原始文档的“节”匹配,就可以创建topicref

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

<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中的另一个有效字符?