XSLT: получить относительный URI вместо абсолютного URI - PullRequest
0 голосов
/ 29 марта 2019

Я хочу:

  1. Создать файл в той же папке, где я запускаю свою таблицу стилей XSLT.
  2. Этот новый файл содержит список ссылок на файлы сопределенное значение в элементе copyrholder.
  3. Имеет относительный путь в href.

Это то, что у меня сейчас есть:

  1. Я создаю новую тему в той же папке
  2. Список ссылок с абсолютным URI

Проблема: указать абсолютный путь относительно только что созданного файла.

Пример

Это папка, на которую я ссылаюсь, и все файлы имеют этуконкретный элемент, который я хочу в списке:

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 голосов
/ 01 апреля 2019

Может ли эта работа:

<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) и все файлы * .dita находятся в одной папке или подпапке.

...