Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Can';无法使用XSL变量和XPATH正确显示XSL_Xml_Xslt - Fatal编程技术网

Xml Can';无法使用XSL变量和XPATH正确显示XSL

Xml Can';无法使用XSL变量和XPATH正确显示XSL,xml,xslt,Xml,Xslt,我正在制作一个包含三个页面的基本联系人列表Web应用程序—一个显示数据库中所有联系人的联系人列表页面(存储在XML文件中)、一个联系人查看页面(显示联系人信息的只读页面)和一个新联系人页面(允许您创建新联系人或编辑以前现有联系人的信息) 我的问题是联系人查看页面。每个联系人都有一个ID,该ID通过URL传递(即contactViewer?ID=mk)。使用这个ID,我希望使用一个简单的xsl for each检查URL请求(保存在一个xsl变量中),从数据库中选择要显示的联系人。不幸的是,在添加

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

我的问题是联系人查看页面。每个联系人都有一个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>

联系人数据库-联系人查看器
h1{颜色:白色;背景色:黑色;边框样式:纯色;
边框颜色:#981b1e;左侧填充:10px;字体重量:粗体;}
联系人查看器




/编辑/删除
XML数据库设置为

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

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

我将使用
apply templates
contact
元素的格式设置为具有给定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>

联系人数据库-联系人查看器
h1{
颜色:白色;
背景色:黑色;
边框样式:实心;
边框颜色:#981b1e;
左侧填充:10px;
字体大小:粗体;
}
联系人查看器




/编辑/删除