Link to home
Start Free TrialLog in
Avatar of nanacz
nanacz

asked on

XSL help pls.....

I have this xsl file which does some cleaning, ordering, and adds some required elements for tracking parent/child relationships. This is the first time i'm using xml n xsl and below is my code:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn.schemas-microsoft-com:xslt" xmlns:a="DAV:" xmlns:d='urn:schemas-microsoft-com:office:office' xmlns:user="http://www.compaq.com/userfunctoins" version="1.0">
<msxsl:script language="JavaScript" implements-prefix="user">
var ii = 0;

function folderh(){
     ii += 1;
     return (ii);
}
function flevel(a){
     var cnt = 0;
     var StrIndex = a.match(/ \ / / g);
     cnt = StrIndex.length-4;
     return(cnt);
}
</msxsl:script>

<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="/">

<content>
<xsl:apply-templates select="a:multistatus/a:response/a:propstat[a:status='HTTP/1.1 200 OK']">

<xsl:sort select="a:prop/a:href"/>

</xsl:apply-templates>
</content>

</xsl:template>

<xsl:template match="a:propstat">
     <xsl:for-each select="a:prop">
          <xsl:variable name = "status">
          <xsl:value-of select= "a:status"/>
          </xsl:variable>

          <xsl:element name="folder">
          <xsl:attribute name="id">
          <xsl:value-of select="a.uid"/>
          </xsl:attribute>

     <foldername>
          <xsl:variable name="target">
          <xsl:value-of select = "a:href"/>
          </xsl:variable>
          <xsl:value-of select="substring-after ($target, 'Content/')" />
     </foldername>

     <posit>
          <xsl:value-of select="user:folderh()"/>
     </posit>

     <filetype>
          <xsl:variable name="filetype">
          <xsl:value-of select="a:displayname"/>
          </xsl:variable>
          <xsl:value-of select="substring-after ($filetype, '.')"/>
     </filetype>

     <displayname><xsl:value-of select="a:displayname"/></displayname>
     <href><xsl:value-of select="a:href"/></href>
     <isfolder><xsl:value-of select="a:isfolder"/></isfolder>
     <iscollection><xsl:value-of select="a:iscollection"/></iscollection>
     <haschildren><xsl:value-of select="a:haschildren"/></haschildren>
     <level>
          <xsl:value-of select="user:flevel(concat(a:parentname, ' '))"/>
     </level>
     <title><xsl:value-of select="d:title"/></title>
     <author><xsl:value-of select="d:author"/></author>
     <parentname><xsl:value-of select="a:parentname"/></parentname>
     <getlastmodified><xsl:value-of select="a:getlastmodified"/></getlastmodified>
     </xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="a:href">

</xsl:template>
</xsl:stylesheet>

The error is:
Script Execution Error: Namespace 'http://www.compaq.com/userfunctions' does not contain any functions.

Question: What do i do for this error?? is there any other url which has the same functions as the above url?? what can i do??

Thanks.
ASKER CERTIFIED SOLUTION
Avatar of sybe
sybe

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of nanacz
nanacz

ASKER

This is my updated code:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:a="DAV:" xmlns:d='urn:schemas-microsoft-com:office:office' xmlns:user="http://www.compaq.com/userfunctions" version="1.0">
<msxsl:script language="JavaScript" implements-prefix="user">
var ii = 0;

function folderh(){
      ii += 1;
      return (ii);
}
function flevel(a){
      var cnt = 0;
      var StrIndex = a.match(/\//g);
      cnt = StrIndex.length-4;
      return (cnt);
}
</msxsl:script>

<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="/">

<content>
<xsl:apply-templates select="a:multistatus/a:response/a:propstat[a:status='HTTP/1.1 200 OK']">

<xsl:sort select="a:prop/a:href"/>

</xsl:apply-templates>
</content>

</xsl:template>

<xsl:template match="a:propstat">
      <xsl:for-each select="a:prop">
            <xsl:variable name = "status">
            <xsl:value-of select= "a:status"/>
            </xsl:variable>

            <xsl:element name="folder">
            <xsl:attribute name="id">
            <xsl:value-of select="a.uid"/>
            </xsl:attribute>

      <foldername>
            <xsl:variable name="target">
            <xsl:value-of select = "a:href"/>
            </xsl:variable>
            <xsl:value-of select="substring-after ($target, 'Content/')" />
      </foldername>

      <posit>
            <xsl:value-of select="user:folderh()"/>
      </posit>

      <filetype>
            <xsl:variable name="filetype">
            <xsl:value-of select="a:displayname"/>
            </xsl:variable>
            <xsl:value-of select="substring-after ($filetype, '.')"/>
      </filetype>

      <displayname><xsl:value-of select="a:displayname"/></displayname>
      <href><xsl:value-of select="a:href"/></href>
      <isfolder><xsl:value-of select="a:isfolder"/></isfolder>
      <iscollection><xsl:value-of select="a:iscollection"/></iscollection>
      <haschildren><xsl:value-of select="a:haschildren"/></haschildren>
      <level>
            <xsl:value-of select="user:flevel(concat(a:parentname,' ' ))"/>
      </level>
      <title><xsl:value-of select="d:title"/></title>
      <author><xsl:value-of select="d:author"/></author>
      <parentname><xsl:value-of select="a:parentname"/></parentname>
      <getlastmodified><xsl:value-of select="a:getlastmodified"/></getlastmodified>
      </xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="a:href">

</xsl:template>
</xsl:stylesheet>

My error is Script Execution Error: Microsoft JScript runtime error Object required line = 11, col = 1 (line is offset from the start of the script block). Error returned from property or method call.

I cant solve this error, this code is from a book, so i guess there shouldnt be any mistakes. There is another file which load this xsl file and another xsl file which converts the xml to hmtl.
if needed, below is the second xsl file:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="uri:xsl">

      <xsl:script><![CDATA[
function addheading(){
var heading = " ";
heading +=" function makedisplayed(a, b, c) \n";
heading +=" { /n";
heading +="       if (a.style.display=='none'){ \n";
heading +="            a.style.display=' ';\n";
heading +="            b.style.display=' ';\n";
heading +="            c.style.display='none';\n";
heading +="       }\n";
heading +="       else {\n";
heading +="             a.style.display='none';\n";
heading +="            b.style.display='none';\n";
heading +="            c.style.display=' ';\n";
heading +="       }\n";
heading +=" }\n";
return heading;
}

      ]]></xsl:script>
<xsl:template match="/">
      <HEAD>
      <SCRIPT LANGUAGE='JavaScript'>
      <xsl:eval>addheading()</xsl:eval>
      </SCRIPT>
      </HEAD>
            <TABLE>
                  <xsl:for-each select="content">
                        <xsl:apply-templates match="folder" />
                  </xsl:for-each>
            </TABLE>

</xsl:template>
      <xsl:template match="folder">
            <xsl:eval no-entities="true">indentCategory(this)</xsl:eval>
      </xsl:template>

<xsl:script><![CDATA[
var IndexOffSet = 0;
function indentCategory(e){
if(e){
      var href = e.selectSingleNode("href");
      var dname = e.selectSingleNode("displayname");
      var dfolder = e.selectSingleNode("isfolder");

      var fileicon = e.selectSingleNode("filetype").text;
      var currLevel = e.selectSingleNode("level").text;
      var hasChildren = e.selectSingleNode("hasChildren").text;
      var hrefText = " ";
      var dnameText = " ";
      var dfolderText = " ";
      var dfolderText = dfolder.text;

      var id = e.selectSingleNode("@id").text;
      if (fileicon.length > 1){
            fileicon = "DocTypeIcons\\" + fileicon + "16.gif";
      }else{
            fileicon ="DocTypeIcons\\DET16.gif";
      }

      var pos = e.selectSingleNode("posit").text;
      pos = Math.abs(pos)+1;
      var m = e.parentNode.childNodes.length
      if (pos <= m){
            eval('var g = e.parentNode.selectSingleNode(\"/content/folder[posit=" + pos +"]\");');
            var isFolder = g.childNodes.item(5).text;
            var nexthasChildren = g.childNodes.item(7).text;
            var nextLevel = g.childNodes.item(8).text;
      }
      else{
            var isFolder = 1;
            var hasChildren = 0;
      }
      if (href){
            hrefText = "href=\"" + href.text + "\" ";
      }
      if (dname){
            dnameText = dname.text;
      }

      var cat = e.selectSingleNode("displayname");
      if (cat){
      }else{
            return hrefText + " " + dnameText;
      }
      var catTxt = cat.text;
      var spaces = " ";
      var retStr2 = " ";
      var cnt = currLevel;
      var ahref = " ";
            
      for(var i=0; i<currLevel-1; i++){
            spaces += "&nbsp;&nbsp;";
      }

      for(var j=1; j<cnt+1; j++){
            var test = " "; //" hasChildren="+hasChildren+" isFolder"+isFolder;

            if (cnt == j){
                  if (1 == dfolderText){
                        if (1 == hasChildren){
                              ahref = "JavaScript:makedisplayed(document.all.item(\"tr"+id+"\"), document.all.item(\"m"+id+"\"), document.all.item(\"p"+id+"\"))";
                              retStr2 += "<TR><TD>&nbsp;</TD>\n" +
                              "<TD width=\"100%\" valign=\"top\" align=\"left\">" + spaces + "<A href = ' "+ahref +" '><IMG border=0 src=\"blueplus.jpg\" id='p"+id+"'></IMG><IMG border=0 src=\"blueminus.jpg\" style=display:'none' id='m"+id+"'></IMG></A>" + "&nbsp;" + dnameText +test+"</TD></TR>";
                              retStr2 += "<TR style=display:'none' id='tr"+ id +"'><TD>&nbsp;</TD><TD><TABLE>";
                        }else{
                              retStr2 += "<TR><TD>&nbsp;</TD>\n" +
                              "<TD width=\"100%\" valign=\"top\" align=\"left\">" + spaces + "<IMG border=0 src=\"empty.gif\" id='p"+id+" '></IMG>" +
                                    "&nbsp;"+ dnameText +test+"</TD></TR>";
                        }
                  }else{
                        retStr2 += "<TR><TD>&nbsp;</TD>\n" +
                        "<TD width=\"100%\" valign=\"top\" align=\"left\">" + spaces + "<IMG align = 'center' border=0 src=' " + fileicon +" '/>" + "&nbsp;&nbsp;" +"<A " + hrefText + ">"+ dnameText+test+"</A></TD></TR>";
                        if (1==isFolder && currLevel > 0 && 0==dfolderText){
                              retStr2 += "</TD></TABLE></TR>";
                        }
                        if ((cnt>2) && (1==isFolder) && (currLevel-1>nextLevel)){
                              retStr2 += "</TD></TABLE></TR>";
                        }
                        if ((cnt>2) && (0==isFolder) && (currLevel>nextLevel)){
                              retStr2 += "</TD></TABLE></TR>";
                        }
                  }
            }

      }
            if ((1==isFolder) && (1==dfolderText) && (cnt>1) && (currLevel > nextLevel))
            {
                  retStr2 += "</TD></TABLE></TR>";
            }
            return retStr2;
}else{
      return " ";
}
}

]]></xsl:script>

</xsl:stylesheet>
This question has been classified abandoned. I will make a recommendation to the
moderators on its resolution in a week or two. I appreciate any comments
that would help me to make a recommendation.

<note>
Unless it is clear to me that the question has been answered I will recommend delete.  It is possible that a Grade less than A will be given if no expert makes a case for an A grade. It is assumed that any participant not responding to this request is no longer interested in its final disposition.
</note>

If the user does not know how to close the question, the options are here:
https://www.experts-exchange.com/help/closing.jsp


Cd&

No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

Accept sybe's comment as answer

Please leave any comments here within the next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Programming_Gal
EE Cleanup Volunteer