[mod_python] 4XSLT/XML (4Suite) is not functioning correctly

Kia Vang Mongryong at sympatico.ca
Fri Jan 10 00:57:05 EST 2003


Okay, I'm really frustrated.  My code seems very simple, yet I can't get
mod_python to output it correctly.    

Here's the mod_python code:

from Ft.Xml import InputSource
from Ft.Xml.Xsl import Processor

from mod_python import apache

def handler(req):
	p = Processor.Processor()
	trans = InputSource.DefaultFactory.fromUri("request.xsl")
	src = InputSource.DefaultFactory.fromUri("request.xml")
	p.appendStylesheet(trans)
	res = p.run(src, topLevelParams={'error':0} )
	
	req.content_type="text/html"
	req.write(res)

	return apache.OK

Here's a cgi version:

from Ft.Xml import InputSource
from Ft.Xml.Xsl import Processor
import sys

if __name__ == "__main__":
	p = Processor.Processor()
	trans = InputSource.DefaultFactory.fromUri("request.xsl")
	src = InputSource.DefaultFactory.fromUri("request.xml")
	p.appendStylesheet(trans)
	
	sys.write("Content-type: text/html")
	p.run(src, topLevelParams={'error':0}, outputStream=sys.stdout )
	
Now, I've also done some tests with libxml2 and libxslt.  I get the same
result with mod_python outputting missing information.

Am I missing something?  I'm using the latest versions of apache,
python, and mod_python.	

On Wed, 2003-01-08 at 20:15, Gregory Bond wrote:
> > any errors/exceptions are occuring.  It seems as if during XSLT
> > processing, the source XML document is being ignored.
> 
> See FAQ 3.5 (http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp) 
> for some hints about what changes between CGI and mod_python. My money is on 
> environment variables or PWD.
> 
> 
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://www.modpython.org/mailman/listinfo/mod_python

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.modpython.org/pipermail/mod_python/attachments/20030110/55fe2ec7/request-0003.htm
-------------- next part --------------
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template name="createObjectiveFormItems">
    <ol>
      <xsl:for-each select="/resume/objectiveList/objective">
        <xsl:variable name="objName">objective<xsl:value-of select="@id"/></xsl:variable>
        <li>
          <xsl:value-of select="@category"/>
          <input type="checkbox">
            <xsl:attribute name="value">
              <xsl:value-of select="$objName"/>
            </xsl:attribute>
          </input>
        </li>
      </xsl:for-each>
    </ol>
  </xsl:template>
  <xsl:template name="createCategoryFormItems">
    <ul>
      <xsl:for-each select="/resume/categoryList/category">
        <div>
          <input type="checkbox">
            <xsl:attribute name="value">
              <xsl:value-of select="@name"/>
            </xsl:attribute>
            <span>
              <xsl:value-of select="@name"/>
            </span>
          </input>
        </div>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template name="createCategoryStyle">
    <style type="text/css">
      <xsl:for-each select="/resume/categoryList/category">
        <xsl:text> .</xsl:text>
        <xsl:value-of select="@name"/>
        <xsl:text>{}</xsl:text>
      </xsl:for-each>
    </style>
  </xsl:template>
  <xsl:template name="createOccupationFormItems">
    <ul>
      <xsl:for-each select="/resume/occupationList/occupation">
        <div>
          <input type="checkbox">
            <xsl:attribute name="value">
              <xsl:value-of select="occupationType/@name"/>
            </xsl:attribute>
            <span>
              <xsl:value-of select="occupationType/@name"/>
            </span>
          </input>
        </div>
      </xsl:for-each>
    </ul> 
  </xsl:template>
  <xsl:template match="/">
    <html>
      <head>
        <title>RezQuest</title>
        <link rel="stylesheet" href="/rezquest/css/professional.css" type="text/css" title="professional" media="all"/>
        <link rel="stylesheet" href="/rezquest/css/elegant.css" type="text/css" title="elegant" media="all"/>
        <link rel="stylesheet" href="/rezquest/css/contemporary.css" type="text/css" title="contemporary" media="all"/>
        <script type="text/javascript" src="/rezquest/scripts/common.js"/>
        <script type="text/javascript" src="/rezquest/scripts/main.js"/>
        <xsl:call-template name="createCategoryStyle"/>
      </head>
      <body>
        <div id="menu">
          <div id="appTitle">
            <h3>RezQuest 0.1</h3>
          </div>
          <div id="styleForm" class="menuItem">
            <form name="styleForm">
              <h3>Select Style</h3>
              <div><input type="radio" name="style" value="professional"/>professional</div>
              <div><input type="radio" name="style" value="elegant"/>elegant</div>
              <div><input type="radio" name="style" value="contemporary"/>contemporary</div>
              <div><input id="refreshButton" type="button" name="refresh" value="Refresh"/></div>         
            </form>
          </div>
          <div id="fontForm" class="menuItem">
            <form name="fontForm" onSubmit="window.focus(); return false;">
              <h3>Adjust Base Font-Size</h3>
              <div><input type="radio" name="fontSizeType" value="%" checked="true"/>percent(%)</div>
              <div><input type="radio" name="fontSizeType" value="em"/>M-height(em)</div>
              <div><input type="radio" name="fontSizeType" value="ex"/>x-height(ex)</div>              
              <div>
                <input id="fontSizeVal" type="text" name="fontSizeVal" value="100" size="4" maxLength="3" onkeypress="return resume_fontSizeOnKeyDown(event);"/>
                <input id="fontSizeApply" type="button" name="fontSizeApply" value="Apply"/>
              </div>
            </form>
          </div>
          <div id="sectionForm" class="menuItem">
            <form name="sectionForm">
              <h3>Select Sections</h3>
              <div><input type="checkbox" value="personHeader"/>top header</div>
              <div><input type="checkbox" value="objective"/>objective</div>
              <div><input type="checkbox" value="skills"/>summary of skills</div>
              <div><input type="checkbox" value="education"/>education</div>
              <div><input type="checkbox" value="work"/>work experience</div>
              <div><input type="checkbox" value="projects"/>projects</div>
              <div><input type="checkbox" value="interests"/>interest</div>
              <div><input type="checkbox" value="references"/>references</div>
            </form>            
          </div>
          <div id="objectiveForm" class="menuItem">
            <form name="objectiveForm">
              <h3>Select Objective</h3>
              <xsl:call-template name="createObjectiveFormItems"/>
            </form>
          </div>
          <div id="categoryForm" class="menuItem">
            <form name="categoryForm">
              <h3>Select Categories</h3>
              <xsl:call-template name="createCategoryFormItems"/>
            </form>
          </div>
          <div id="occupationForm" class="menuItem">
            <form name="occupationForm">
              <h3>Select Occupations</h3>
              <xsl:call-template name="createOccupationFormItems"/>
            </form>
          </div>
          <div id="printForm" class="menuItem">
            <form name="printForm">
              <input style="width: 100%" id="previewButton" type="button" name="preview" value="Preview"/>
              <input style="width: 100%" id="printButton" type="button" name="print" value="Print"/>	      
            </form>
          </div>
          <div id="fileOptions" class="menuItem">
            <h3>File Options</h3>
            <div><a id="openResume" href="/cgi-bin/rezquest/main.py?request=login" title="Get another resume">Open New</a></div>
            <div><a id="exitresume" href="/rezquest/exit.html" title="Exit RezQuest">Exit</a></div>
          </div>
          <div id="copyRight">
            <span><xsl:text disable-output-escaping="yes">&#169;</xsl:text> 2002 by Refugee Media Networks.</span>
          </div>
        </div>
        <div id="main">
          <div id="personHeader" class="section">
            <div id="personInfo">
              <div id="residence" class="contactInfo">
                <xsl:apply-templates select="resume/residenceList"/>
              </div>
              <div id="phone" class="contactInfo">
                <xsl:apply-templates select="resume/phoneList"/>
              </div>
              <div id="email" class="contactInfo">
                <xsl:apply-templates select="resume/emailList"/>
              </div>
              <div id="filler1"/>
            </div>
            <xsl:apply-templates select="resume/person"/>
          </div>
          <div id="objective" class="section">
            <h2 class="title">Objective</h2>
            <div class="content">
              <xsl:apply-templates select="resume/objectiveList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="skills" class="section">
            <h2 class="title">Summary of Skills</h2>
            <div class="content">
              <xsl:apply-templates select="resume/skillList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="education" class="section">
            <h2 class="title">Education</h2>
            <div class="content">
              <xsl:apply-templates select="resume/educationList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="work" class="section">
            <h2 class="title">Work Experience</h2>
            <div class="content">
              <xsl:apply-templates select="resume/occupationList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="projects" class="section">
            <h2 class="title">Personal Projects</h2>
            <div class="content">
              <xsl:apply-templates select="resume/projectList"/>
              <div class="contentFiller">&#160;</div>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="interests" class="section">
            <h2 class="title">Interests</h2>
            <div class="content">
              <xsl:apply-templates select="resume/interestList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
          <div id="references" class="section">
            <h2 class="title">References</h2>
            <div class="content">
              <xsl:apply-templates select="resume/referenceList"/>
            </div>
            <div class="contentFiller">&#160;</div>
          </div>
        </div>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="skillList">
    <ul>
      <xsl:for-each select="skill">
        <li>
          <xsl:attribute name="class">
            <xsl:value-of select="@category"/>
          </xsl:attribute>
          <xsl:value-of select="description"/>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template match="objectiveList">
    <ul>
      <xsl:for-each select="objective">
        <li>          
          <xsl:attribute name="id">objective<xsl:value-of select="@id"/></xsl:attribute>
          <xsl:value-of select="description"/>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template match="residenceList">
    <xsl:for-each select="residence">
      <xsl:if test="@type='home'">
        <div class="key">Residence</div>
        <div class="value">
          <div class="region">
            <xsl:value-of select="address"/>
          </div>
          <div class="region">
            <xsl:value-of select="city"/>
          </div>
          <div class="region">
            <xsl:value-of select="state/@code"/>
          </div>
          <div class="region">
            <xsl:value-of select="state/country/@code"/>
          </div>
          <div class="region">
            <xsl:value-of select="zip"/>
          </div>
        </div>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="educationList">
    <xsl:for-each select="education">
      <xsl:if test="@degree='basc'">
        <h2>
          <xsl:value-of select="@major"/>
        </h2>
        <h3 class="subHead">
          <xsl:value-of select="institution/name"/>
        </h3>
        <h3 class="subHead">
          <span class="region">
            <xsl:value-of select="institution/location/city"/>
          </span>
          <span class="region">
            <xsl:value-of select="institution/location/state/@code"/>
          </span>
        </h3>
        <h3 class="subHead"><xsl:value-of select="substring(startDate,1,7)"/> to <xsl:value-of select="substring(endDate,1,7)"/></h3>
        <div class="contentFiller"/>
        <div>
          <ul>
            <li>Bachelor of Applied Science</li>
          </ul>
        </div>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="occupationList">
    <xsl:for-each select="occupation">
<!--xsl:if test="occupationType/@name='dsp software' or occupationType/@name='windows'"-->
      <div class="subSection">
        <xsl:attribute name="name"><xsl:value-of select="occupationType/@name"/></xsl:attribute>
        <h2>
          <xsl:value-of select="occupationType/title"/>
        </h2>
        <h3 class="subHead">
          <xsl:value-of select="company/name"/>
        </h3>
        <h3 class="subHead">
          <span class="region">
            <xsl:value-of select="company/location/city"/>
          </span>
          <span class="region">
            <xsl:value-of select="company/location/state/@code"/>
          </span>
        </h3>
        <h3 class="subHead"><xsl:value-of select="substring(startDate,1,7)"/> to <xsl:value-of select="substring(endDate,1,7)"/></h3>
        <div class="contentFiller"/>
        <xsl:apply-templates select="summaryList"/>
      </div>
<!--/xsl:if-->
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="referenceList">
    <xsl:for-each select="reference">
<!--xsl:if test="@degree='basc'"-->
      <div class="subSection">
        <h2>
          <xsl:value-of select="name"/>
        </h2>
        <h3 class="subHead">
          <xsl:value-of select="@position"/>
        </h3>
        <h3 class="subHead">
          <xsl:value-of select="company/name"/>
        </h3>
        <div class="contentFiller"/>
        <div class="subHead"><xsl:value-of select="phone/@area"/>.<xsl:value-of select="phone/number"/><xsl:if test="phone/ext &gt; 0"> ext.<xsl:value-of select="phone/ext"/></xsl:if></div>
        <div class="subHead">
          <xsl:value-of select="email"/>
        </div>
        <div id="filler2"/>
      </div>
<!--/xsl:if-->
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="projectList">
    <ul>
      <xsl:for-each select="project">
        <li>
          <xsl:attribute name="class">
            <xsl:value-of select="@category"/>
          </xsl:attribute>
          <xsl:value-of select="description"/>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template match="interestList">
    <ul>
      <xsl:for-each select="interest">
        <xsl:choose>
          <xsl:when test="position()!=last()">
            <li>
              <xsl:value-of select="@name"/>
            </li>
          </xsl:when>
          <xsl:otherwise>
            <li>
              <xsl:attribute name="id">lastInterest</xsl:attribute>
              <xsl:value-of select="@name"/>
            </li>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template match="summaryList">
    <ul>
      <xsl:for-each select="summary">
        <li>
          <xsl:attribute name="class">
            <xsl:value-of select="@category"/>
          </xsl:attribute>
          <xsl:value-of select="description"/>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
  <xsl:template match="phoneList">
    <xsl:for-each select="phone">
      <div class="keyValue">
        <div class="key">
          <xsl:value-of select="@type"/>
        </div>
        <div class="value"><xsl:value-of select="@area"/>.<xsl:value-of select="number"/></div>
      </div>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="emailList">
    <xsl:for-each select="email">
      <xsl:if test="@type='school'">
        <div class="keyValue">
          <div class="key">email</div>
          <div class="value">
            <xsl:value-of select="address"/>
          </div>
        </div>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="person">
    <div id="personName">
      <div>
        <span id="firstName">
          <xsl:value-of select="firstName"/>
        </span>
        <span id="lastName">
          <xsl:value-of select="lastName"/>
        </span>
      </div>
    </div>
  </xsl:template>
</xsl:stylesheet>


More information about the Mod_python mailing list