Как я могу импортировать или включать таблицу стилей xsl из одного xsl в другой xsl?

Как я могу импортировать или включать таблицу стилей xsl из одного xsl в другой xsl

это мой код

Сотрудник.xml

<?xml version = "1.0"?>  
<?xml-stylesheet type = "text/xsl" href = "employee.xsl"?>   
<class>   
   <employee id = "016">  
      <firstname>Aryan</firstname>   
      <lastname>Gupta</lastname>   
      <linkurl>https://www.aryanguptan.com/external</linkurl>   
      <salary>30000</salary>  
   </employee>   
        <employee id = "080">   
      <firstname>Sam</firstname>   
      <lastname>Alex</lastname>   
      <linkurl>/user/internal/080</linkurl>   
      <salary>10000</salary>   
   </employee>  
   <employee id = "024">   
      <firstname>Sara</firstname>   
      <lastname>Khan</lastname>   
      <linkurl>http://www.sarakhan.com</linkurl>   
      <salary>25000</salary>  
   </employee>   
    <employee id = "092">   
      <firstname>John</firstname>   
      <lastname>Samuel</lastname>   
      <linkurl>/user/internal/092</linkurl>   
      <salary>10000</salary>   
   </employee> 
   <employee id = "056">   
      <firstname>Peter</firstname>   
      <lastname>Symon</lastname>   
      <linkurl>www.petersymon.com</linkurl>   
      <salary>10000</salary>   
   </employee>    
</class> 

Это лист xsl этого кода

Сотрудник.xsl

<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  
 <xsl:import href = "globaVar.xsl" />     
   <xsl:template match = "/">      
    <xsl:apply-imports/>   
      <html>   
         <body>   
            <h2>Employee </h2>   
            <table border = "1">   
               <tr bgcolor = "pink">   
                  <th>ID</th>   
                  <th>First Name</th>   
                  <th>Last Name</th>   
                  <th>Link URL</th>   
                  <th>Salary</th>   
               </tr>           
               <xsl:for-each select = "class/employee">                                 
                     <tr>   
                        <td><xsl:value-of select = "@id"/></td>   
                        <td><xsl:value-of select = "firstname"/></td>   
                        <td><xsl:value-of select = "lastname"/></td>  
                        <xsl:variable name = "linkurl" select = "linkurl" />
                        <xsl:choose> 
                            <xsl:when test = "$lookup/tld[starts-with($linkurl, .)]">
                                <td><a href = "{linkurl}" target = "_blank"><xsl:value-of select = "linkurl"/></a></td>
                            </xsl:when>
                            <xsl:otherwise>
                                <td><a href = "www.google.com/{linkurl}"><xsl:value-of select = "concat('www.google.com/',linkurl)"/></a></td>
                            </xsl:otherwise>
                        </xsl:choose>                            
                        <td><xsl:value-of select = "salary"/></td>  
                     </tr>                        
               </xsl:for-each>         
            </table>   
         </body>   
      </html>  
   </xsl:template>    
</xsl:stylesheet>       

Здесь я пытаюсь импортировать этот код (GlobalVar.xsl) в другой лист xsl для повторного использования.

GlobalVar.xsl

<?xml version = "1.0"?>
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
  <xsl:template name = "linkURLTemplate">
    <xsl:variable name = "tlds">
          <tld>http://</tld>
          <tld>https://</tld>
          <tld>www.</tld>      
       </xsl:variable>         
       <xsl:variable name = "lookup" select = "document('')//xsl:variable[@name='tlds']"/>   
  </xsl:template>
</xsl:stylesheet>   

Но когда я пытаюсь запустить employee.xml, я получаю эту ошибку

«Ошибка во время преобразования XSLT: произошла неизвестная ошибка ()»

Можете ли вы сказать, что я сделал неправильно?

Запустите XSLT с процессором или IDE, который выдаст вам более подробное сообщение об ошибке, чем используемый в настоящее время инструмент (браузер?). В дополнение к ошибке, отображаемой в окне браузера, проверьте консоль разработчика с помощью F12 или аналогичной для получения более подробной информации. Если вы ожидаете, что импортированная таблица стилей будет экспортировать переменную в импортирующую, используйте глобальную переменную, то есть верхний уровень xsl:variable. Кроме того, именованные шаблоны не используются apply-imports, и для использования переменных вам не нужно применять какие-либо шаблоны. Полагаться на document('') — довольно хрупкий подход.

Martin Honnen 07.04.2019 23:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть две ошибки в ваших таблицах стилей:

  1. У вас неправильное имя для вашей подтаблицы стилей в Employee.xsl. Так что меняйте строчку

    <xsl:import href = "globaVar.xsl" />     
    

    к

    <xsl:import href = "GlobalVar.xsl" />     
    
  2. В вашей подтаблице стилей GlobalVar.xsl вы определили переменные не на верхнем уровне, а в шаблоне. Но вы должны определить их на верхнем уровне, чтобы использовать их в других ваших шаблонах. Удалите xsl:template из GlobalVar.xsl, чтобы это выглядело так:

    <?xml version = "1.0"?>
    <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
    
        <xsl:variable name = "tlds">
            <tld>http://</tld>
            <tld>https://</tld>
            <tld>www.</tld>      
        </xsl:variable>    
    
        <xsl:variable name = "lookup" select = "document('')/xsl:stylesheet/xsl:variable[@name='tlds']"/>   
    
    </xsl:stylesheet>  
    

    Здесь я также изменил определение переменной lookup на

    <xsl:variable name = "lookup" select = "document('')/xsl:stylesheet/xsl:variable[@name='tlds']"/> 
    

    чтобы иметь более прямой доступ к этой переменной.

Теперь ваши таблицы стилей должны работать должным образом.

Правильный. Таким образом, ошибка заключалась в попытке использовать переменную без ее объявления. Что-то вроде: Stylesheet compilation failed with 1 error(s): Error 1 at line 23:7 : Variable lookup has not been declared (or its declaration is not in scope)

Alejandro 08.04.2019 21:48

Другие вопросы по теме