XSLT:获取相对URI而不是绝对uri

时间:2019-03-29 13:29:39

标签: xslt dita

我要:

  1. 在运行XSLT样式表的文件夹中创建一个文件。
  2. 此新文件在copyrholder元素中具有具有特定值的文件的href列表。
  3. 在href中具有相对路径。

这是我目前拥有的:

  1. 我在同一文件夹中创建一个新主题
  2. 具有绝对uri的href列表

问题:相对于我刚刚创建的文件建立绝对路径。

示例

这是我要引用的文件夹,并且所有文件在列表中都有我想要的特定元素:

C:/dita/file1.dita

C:/dita/file2.dita

C:/dita/file3.dita

C:/dita/file4.dita

C:/dita/en/file5.dita

这是我使用的XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:template match="/">
<xsl:result-document href="newtopic.dita" doctype-public="-//OASIS//DTD DITA Topic//EN" doctype-system="topic.dtd" indent="yes">
<topic id="to_new_topics">
<xsl:element name="title">New topics</xsl:element>
<xsl:element name="body">
<xsl:variable name="folderURI" select="resolve-uri('.',base-uri())"/>
<ul>
<xsl:for-each select="collection(concat($folderURI, '?select=*.dita;recurse=yes'))//copyrholder[contains(., 'value')]">
<li>
<xsl:element name="xref">
<xsl:attribute name="href">
<xsl:value-of select="base-uri()" />
</xsl:attribute>
</xsl:element>
</li>
</xsl:for-each>
</ul>
</xsl:element>
</topic>
</xsl:result-document>
</xsl:template>

</xsl:stylesheet>

这是当前结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
  PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="to_new_topics">
   <title>New topics</title>
   <body>
      <ul>
         <li><xref href="file:/C:/´dita/file1.dita"/></li>
         <li><xref href="file:/C:/´dita/file2.dita"/></li>
         <li><xref href="file:/C:/´dita/file3.dita"/></li>
         <li><xref href="file:/C:/´dita/file4.dita"/></li>
         <li><xref href="file:/C:/dita/en/file5.dita"/></li>
      </ul>
   </body>            
</topic>

这就是我想要的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
  PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="to_new_topics">
   <title>New topics</title>
   <body>
      <ul>
         <li><xref href="file1.dita"/></li>
         <li><xref href="file2.dita"/></li>
         <li><xref href="file3.dita"/></li>
         <li><xref href="file4.dita"/></li>
         <li><xref href="en/file5.dita"/></li>
      </ul>
   </body>            
</topic>

有人可以帮助我使路径相对吗?

1 个答案:

答案 0 :(得分:0)

可以这样做:

<xsl:value-of select="replace(base-uri(), $folderURI, '') "/>

(在注释中未看到此内容),因为如果问题是外部参照处的绝对路径,那么用空值替换路径应该可以解决此问题。或者我只是了解一些严重的错误。 :)这是我测试的最终结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
  PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="to_new_topics">
   <title>New topics</title>
   <body>
      <ul>
         <li>
            <xref href="en/file3.dita"/>
         </li>
         <li>
            <xref href="file1.dita"/>
         </li>
         <li>
            <xref href="file2.dita"/>
         </li>
      </ul>
   </body>
</topic>

经过以下测试:XSL,newtopic.xml(为避免问题并将其重命名为.xml,而不是.dita),并且所有file * .dita文件都位于同一文件夹或子文件夹中。