XSLT: как проверить определенный протокол или строку, присутствующую в URL - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу отобразить этот xml-файл, следуя указаниям

Страница должна содержать таблицу данных сотрудника.Столбцы должны иметь следующие заголовки: id, Имя, Фамилия, URL ссылки, Таблица зарплаты должны содержать сведения о сотрудниках соответственно.

Условие, если ссылка имеет (http: // или https: // или www) когда я нажимаю на ссылку, она должна открываться в новой вкладке, что означает - 016 024 056 должно открываться в новой вкладке

Другие ссылки должны открывать ту же вкладку, т.е. -080, 092 должны открывать ту же вкладку

сотрудник.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> 

Это файл таблицы стилей

employee.xsl

            <?xml version = "1.0" encoding = "UTF-8"?>   

                <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:variable[@name='tlds']"/>   

                   <xsl:template match = "/">          

                      <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: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>  

Когда я выполняю employee.xml, я получаю эту ошибку в своем браузере

Ошибка при преобразовании XSLT: функция XPath была вызвана с неправильным числом аргументов.

А также возможно ли использовать шаблон вариабельной системы отдельно?Я ожидаю этот вывод

enter image description here

1 Ответ

1 голос
/ 07 апреля 2019

Проблема с этой строкой:

<xsl:when test="$lookup/tld[starts-with($linkurl)]">

Функция starts-with принимает два параметра;первая строка, которую вы хотите проверить, начинается со второго параметра.Другими словами, это должно быть так:

<xsl:when test="$lookup/tld[starts-with($linkurl, .)]">

Обратите внимание, что предполагается, что вы определили переменную $linkurl в своей таблице стилей, поскольку в настоящее время она опущена

<xsl:variable name="linkurl" select="linkurl" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...