2015-12-05 4 views
0

Я использую xslt для преобразования большого xml в более мелкие связанные файлы html. У меня возникли проблемы с функцией generate-id(), поскольку сгенерированные идентификаторы не совпадают для html href = "", а идентификаторы в именах файловusing generate-id() для xsl: имя файла документа результата и ссылка на HTML

Я создаю следующие файлы через xsl: result-document:

index.html | d1e83523.html | d1e83524.html | d1e83525.html | ...

index.html должен содержать список со ссылками на другие * .html файлы


index.html, что я хочу, но все это я получаю разные идентификаторы:

 <ul> 
     <li><a href="d1e83523.html">Sample 1</a></li> 
     <li><a href="d1e83524.html">Sample 2</a></li> 
     <li><a href="d1e83525.html">Sample 3</a></li> 
     </ul> 

XSL для создания I ndex.html:

<xsl:template match="lab/*"> 
    <xsl:result-document encoding="utf-8" method="html" href="HTML_out/index.html" > 
       <html> 
        <head></head> 
        <body> 
         <ul> 
          <xsl:for-each select="chapter/heading"> 
           <li> 
            <a href="{generate-id()}.html"> 
             <xsl:value-of select="foo"/> 
            </a> 
           </li> 
          </xsl:for-each> 
         </ul> 
        </body> 
       </html> 
      </xsl:result-document> 
</xsl:template> 

XSL создать другой * .html:

<xsl:template match="chapter/*[not(self::heading)]"> 
     <xsl:for-each select="."> 
      <xsl:result-document encoding="utf-8" method="html" href="HTML_out/{concat(generate-id(), '.html')}" > 
       <html> 
        <head></head> 
        <body> 
         <xsl:apply-templates/> 
        </body> 
       </html> 
      </xsl:result-document> 
     </xsl:for-each> 
    </xsl:template> 

XML-образец (примечание: несколько описание -подобные структурированные элементы follo крыло)

<lab> 
    <description> 
     <chapter> 
      <heading>Example</heading 
      <operation>other elements</operation> 
      <operation>other elements</operation> 
      ... 
     </chapter> 
     ... 
    </description> 
</lab> 

Я благодарен за любую помощь!

EDIT: Я использую генерировать-идентификатор(), чтобы получить уникальное имя файла для многих файлов

ответ

1

Если изменить <xsl:for-each select="chapter/heading"> к <xsl:for-each select="chapter/*[not(self::heading)]"> тогда ваше поколение индекс обрабатывает те же элементы, для которых вы создаете результат документов и сгенерированные идентификаторы должны совпадать. Тем не менее, вам нужно запустить оба фрагмента XSLT внутри одного и того же преобразования, чтобы обеспечить получение одинаковых идентификаторов, если у вас есть отдельные таблицы стилей, тогда сгенерированный идентификатор не гарантирует того же результата.

+0

Большое вам спасибо! К сожалению, я до сих пор не совсем понимаю, как работает функция generate-id() ... Я попытался различить, чтобы добраться до тех же наборов узлов внутри скобок функций, но ничего не работало для меня. Однако это решение получило трюк! – DTR9000