2013-05-13 3 views
0

Я создаю базовое веб-приложение «Список контактов» с тремя страницами - страницу «Список контактов», в которой отображаются все контакты в БД (хранятся в файле XML), Страница «Просмотр контактов» (это страница только для чтения, на которой отображается контактная информация) и страница «Новый контакт» (которая позволяет вам создавать новый контакт или редактировать информацию о ранее существовавшем контакте).Невозможно правильно отобразить XSL с переменными XSL и XPATH

Моя проблема связана с контактной страницей. Каждый контакт имеет идентификатор, и этот идентификатор передается через URL-адрес (т. Е. ContactViewer? Id = mk). Используя этот идентификатор, я надеялся, что с помощью простого xsl для каждого, который проверяет URL-запрос (сохраненный в переменной xsl), чтобы выбрать, какой контакт из БД для отображения будет работать. К сожалению, после добавления «для каждого» ничего не отображается на странице, и я не могу понять, где это происходит.

Это страница XSL для ContactView.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="url"/> 
    <xsl:variable name="currentID" select="substring-after($url, 'id=')"/> 
    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>Contact Database - Contact Viewer</title> 
       <style> 
        h1 {color:white; background-color:black; border-style:solid; 
        border-color: #981b1e; padding-left:10px; font-weight:bold;} 
       </style> 
      </head> 
      <body> 
       <h1>Contact Viewer</h1> 
       <xsl:value-of select="$currentID"/> 
       <xsl:for-each select="contactdatabase/contact/id[$currentID]"> 
        <table cellspacing="5" border="3"> 
         <tr height="60"> 
          <td width="70px"> 
           <xsl:value-of select="contactdatabase/contact/firstName"/> 
          </td> 
          <td width="100px"> 
           <xsl:value-of select= "contactdatabase/contact/lastName"/> 
          </td> 
          <td width="120px"> 
           <xsl:value-of select="contactdatabase/contact/firstName"/> 
          </td> 
          <td width="90px"> 
           <xsl:value-of select="contactdatabase/contact/firstName"/> 
          </td> 
          <td width="35px"> 
           <xsl:value-of select="contactdatabase/contact/state"/> 
          </td> 
          <td width="44px"> 
           <xsl:value-of select="contactdatabase/contact/zipcode"/> 
          </td> 
          <td width="60px"> 
           <xsl:value-of select="contactdatabase/contact/country"/> 
          </td> 
          <td width="80"> 
           <xsl:value-of select="contactdatabase/contact/email"/> <br></br> 
           <xsl:value-of select="contactdatabase/contact/home"/> <br></br> 
           <xsl:value-of select="contactdatabase/contact/mail"/> 
          </td> 
          <td width="80"> 
           <xsl:value-of select="contactdatabase/contact/phonenum"/> 
          </td> 
          <td width="180"> 
           <xsl:value-of select="contactdatabase/contact/emailaddress"/> 
          </td> 
          <td width="120px"> 
           <a href="contactViewer?contactid={id}">view</a>/edit/delete 
          </td> 
         </tr> 
        </table> 
       </xsl:for-each> 
       <a href="contactList">Contact List</a> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

База данных XML устанавливается как

<contactdatabase> 
    <contact> 
     <firstName /> 
     <lastName /> 
     <address /> 
     <city /> 
     <state /> 
     <zipcode /> 
     <country /> 
     <email /> 
     <phone /> 
     <mail /> 
     <phonenum /> 
     <emailaddress /> 
     <comment /> 
     <id /> 
    </contact> 
</contactdatabase> 

ответ

2

правильное выражение XPath для выбора требуемого contact элемент contactdatabase/contact[id = $currentID].

Вместо for-each Я хотел бы использовать apply-templates для форматирования contact элемента с заданным идентификатором, и написать отдельный шаблон для соответствия contact элементов. Это будет выглядеть так.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:param name="url"/> 
    <xsl:variable name="currentID" select="substring-after($url, 'id=')"/> 

    <xsl:template match="/"> 
    <html> 
     <head> 
     <title>Contact Database - Contact Viewer</title> 
     <style> 
      h1 { 
      color:white; 
      background-color:black; 
      border-style:solid; 
      border-color:#981b1e; 
      padding-left:10px; 
      font-weight:bold; 
      } 
     </style> 
     </head> 
     <body> 
     <h1>Contact Viewer</h1> 
     <xsl:value-of select="$currentID"/> 
     <xsl:apply-templates select="contactdatabase/contact[id = $currentID]"/> 
     <a href="contactList">Contact List</a> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="contact"> 

     <table cellspacing="5" border="3"> 
     <tr height="60"> 
      <td width="70px"> 
      <xsl:value-of select="firstName"/> 
      </td> 
      <td width="100px"> 
      <xsl:value-of select= "lastName"/> 
      </td> 
      <td width="120px"> 
      <xsl:value-of select="firstName"/> 
      </td> 
      <td width="90px"> 
      <xsl:value-of select="firstName"/> 
      </td> 
      <td width="35px"> 
      <xsl:value-of select="state"/> 
      </td> 
      <td width="44px"> 
      <xsl:value-of select="zipcode"/> 
      </td> 
      <td width="60px"> 
      <xsl:value-of select="country"/> 
      </td> 
      <td width="80"> 
      <xsl:value-of select="email"/> <br></br> 
      <xsl:value-of select="home"/> <br></br> 
      <xsl:value-of select="mail"/> 
      </td> 
      <td width="80"> 
      <xsl:value-of select="phonenum"/> 
      </td> 
      <td width="180"> 
      <xsl:value-of select="emailaddress"/> 
      </td> 
      <td width="120px"> 
      <a href="contactViewer?contactid={id}">view</a>/edit/delete 
      </td> 
     </tr> 
     </table> 

    </xsl:template> 

</xsl:stylesheet> 
Смежные вопросы