0

我正在制作一个包含三个页面的基本联系人列表 Web 应用程序 - 一个显示数据库中所有联系人的联系人列表页面(存储在 XML 文件中),一个联系人视图页面(即显示联系人信息的只读页面)和新联系人页面(允许您建立新联系人或编辑以前存在的联系人的信息)。

我的问题是联系人视图页面。每个Contact都有一个ID,这个ID是通过URL传递的(即contactViewer?id=mk)。使用此 ID,我希望使用一个简单的 xsl for-each 检查 URL 请求(保存在 xsl 变量中)以从数据库中选择要显示的联系人。不幸的是,在添加“for-each”之后,页面上什么也没有显示,我不知道哪里出了问题。

这是 ContactView 的 XSL 页面。

<?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>
4

1 回答 1

2

选择所需contact元素的正确 XPath 表达式是contactdatabase/contact[id = $currentID].

而不是for-each我将使用apply-templates给定 ID 格式化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>
于 2013-05-13T02:30:56.040 回答