Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


XML/XSLT Nöt

Postades av 2004-11-07 20:50:12 - Roger Alsing, i forum systemutveckling generellt, Tråden har 13 Kommentarer och lästs av 1295 personer

Här kommer en XML-XSLT nöt för syntax highlightingen för kod här på pellesoft.

Pelle har tjatat på mig ett tag för att fixa html exporteringen av highlightad kod här.
men eftersom jag inte är världmästare på standardiserad html och javascript så har jag nu gjort en XML exporter för parsern istället.

Här är ett exempel på parsad kod i XML format.
http://www.compona.com/pellekod.xml

xml filen har följande taggar:

<root>   - dokumentroot
<row>    - tag för början av en rad
<ws length="3">  - whitespace tag , length attribet är antalet blanksteg
<word bold="true" italic="true" underline="true" backcolor="#ffffff" forecolor="#000000"> - ett ord
<childrows> - container för childrader , dvs rader som ska kollapsas om ägande rad foldas


(ni ser förhoppningsvis ungefär hur det är tänkt)

så uppgiften är , skriv en XSLT fil som transformerar XML dokumentet till HTML som :

* wordwrappar om en rad är bredare än sin container (tex en div med fast css bredd)
* är copypaste vänlig
* javascript för folding

alla färger och om text ska vara bold/italic/underlined och vad som kan foldas finns i xmlfilen.

[edit]
det borde gå att göra ganska kul saker , tex generera htmlkod där man får en javascript knapp som kopierar koden till clipboardet.
[/edit]

//Roger


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-08 14:53:31 - Johan Asplund

Hej,

Detta såg ut som en kul grej så jag skapade en liten XSLT som är testad i XMLSPY. (Resultatet blir HTML.) Vad jag inte fattade riktigt var "folding". Ska det vara typ som i VS med #region och kommer detta att komma med i XMLen någonstans?

Mvh
Johan



Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-08 15:08:39 - Roger Alsing

foldingen är:

public void Blah
{ //folding <--

    if (bla)
    { //<-- mer folding
        
    }
}


för att lösa detta genererar jag två div'ar .
en div som spänner över alla rader fom { tom } och en div som bara innehåller "{...}"
om någon klickar på - så gömmer jag den första divven och visar den andra och kickar man på + så blir det tvärt om...

och det är därför man får med en extra rad med "{...}" om man copy pejstar härifrån..

så jag tänkte att om jag istället exporterar till xml , så kan ju ni som kan html och javascript på riktigt fixa den biten ;)

och då har jag exporterad med alla folding sektioner som < childrows > taggar i xml'en , så ni inte behöver göra annat än att spotta ut rätt html och javascript..


---
en tanke jag haft var att om det kanske går att efter själva snippeten med foldbar kod , så lägger man en knapp med "copy to clipboard" som kanske kan kopiera snippeten som ren text och inte som html med massa gegga i..

//Roger


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-09 07:58:53 - Johan Asplund

Hmm ja då blev det var lite jobbigare ;)

Men jag har en version som du skulle kunna testa. Tyvärr är inte wordwrapp löst ännu men man slipper de extra {...} om man markerar och kopierar.

Det ska till 2 st bilder för att det ska fungera men det är lite svårt att klistra in dom här.
bild 1 namn: closed.gif ska visa "{...}"
Bild 2 namn: transp_pixel.gif en transparent pixel

<code>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:user="http://www.pellesoft.se" extension-element-prefixes="msxsl" exclude-result-prefixes="user">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<msxsl:script language="JScript" implements-prefix="user">
//**
//Create a string of spaces
function formatSpace(noOfSpaces)
{
var res = "";
for(i=0;i&lt;noOfSpaces;i++)
{
res += "&amp;nbsp;";
}
return res;
}

//**
//Get unique div neme
function getDivName()
{
return "div" + Math.floor(Math.random() * 99999);
}
</msxsl:script>
<xsl:template match="/root">
<script language="JavaScript">
/*
Client functions
*/

//**
//Create a string of spaces
function formatSpace(noOfSpaces)
{
var res = "";
for(i=0;i&lt;noOfSpaces;i++)
{
res += "&amp;nbsp;";
}
return res;
}

//**
//Open close div tags
function OpenClose(divId, noOfSpaces)
{
var oDiv;
var oSpan;
oDiv = document.all[divId]
oSpan= document.all['s' + divId];
if(oDiv)
{
if(oDiv.style.display=='none')
{
oDiv.style.display=''
oSpan.innerHTML= "";
}
else
{
oDiv.style.display='none'
oSpan.innerHTML= "&lt;img onclick='OpenClose(" + "\"" + divId+ "\",\"" + noOfSpaces +"\"" + ")' src='PlusNoLines.gif'&gt;&lt;/img&gt;" + formatSpace(noOfSpaces) + "&lt;img src='closed.gif' &gt;&lt;br&gt;";
}
}
}
</script>
<table style="background-color:#f5f5f5;width:100%;background-color:#FAFAFA;border: 1px solid #C0C0C0;font-family:Verdana, Lucida Console, Arial;">
<tr>
<td width="550" nowrap="1" class="Text">
<xsl:apply-templates select="/root/row"/>
</td>
</tr>
</table>
</xsl:template>


<!-- row template -->
<xsl:template match="row">
<xsl:variable name="divId">
<xsl:value-of select="user:getDivName()"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="./word = '{'">
<span>
<xsl:attribute name="id">s<xsl:value-of select="$divId"/></xsl:attribute>
</span>
<xsl:text disable-output-escaping="yes"><![CDATA[<div style="display=block" id="]]></xsl:text>
<xsl:value-of select="$divId"/>
<xsl:text disable-output-escaping="yes"><![CDATA[">]]></xsl:text>
<img src="minus.gif" align="top" border="0">
<xsl:attribute name="onclick">OpenClose('<xsl:value-of select="$divId"/>','<xsl:value-of select="string(ws[1]/@length)"/>')</xsl:attribute>
</img>
<xsl:apply-templates select="./*">
<xsl:with-param name="divId" select="$divId"/>
</xsl:apply-templates>
<xsl:choose>
<xsl:when test="./childrows">
<!-- do nothing -->
</xsl:when>
<xsl:otherwise>
<xsl:if test="./word != '}'">
<br/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="./word = '}'">
<img src="L.gif" align="top" border="0"/>
<xsl:apply-templates select="./*">
<xsl:with-param name="divId" select="$divId"/>
</xsl:apply-templates>
<xsl:text disable-output-escaping="yes"><![CDATA[</div>]]></xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="preceding-sibling::*[word = '{']">
<img src="I.gif" border="0" align="top"/>
</xsl:when>
<xsl:when test="name(./..) = 'childrows'">
<img src="I.gif" border="0" align="top"/>
</xsl:when>
<xsl:otherwise>
<img src="transp_pixel.gif" border="0" width="11" height="16" align="top"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="./*">
<xsl:with-param name="divId" select="$divId"/>
</xsl:apply-templates>
<br/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


<!-- word template -->
<xsl:template match="word">
<xsl:param name="divId"/>
<xsl:if test="position() != 0">
<span>
<xsl:value-of select="user:formatSpace(string(preceding-sibling::*[1]/@length))" disable-output-escaping="yes"/>
</span>
</xsl:if>
<span>
<xsl:attribute name="style">color:<xsl:value-of select="@forecolor"/></xsl:attribute>
<xsl:if test="@bold = 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<b>]]></xsl:text>
</xsl:if>
<xsl:if test="@italic= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<i>]]></xsl:text>
</xsl:if>
<xsl:if test="@underline= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<u>]]></xsl:text>
</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="@underline= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</u>]]></xsl:text>
</xsl:if>
<xsl:if test="@italic= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</i>]]></xsl:text>
</xsl:if>
<xsl:if test="@bold = 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</b>]]></xsl:text>
</xsl:if>
</span>
</xsl:template>


<!-- childrows template -->
<xsl:template match="childrows">
<br/>
<xsl:apply-templates select="row"/>
</xsl:template>
</xsl:stylesheet>
</code>


/Johan


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-12 11:49:41 - Roger Alsing

Den fungerar prima ,
märkte att jag har någon rejäl bugg i exportern så den fick bara med EN childrows sektion.
den ska ju självklart finnas på att som kan foldas och du ska inte själv behöva matcha på '{' och '}'
det var redigt klantigt av mig att inte kolla det innan jag laddade upp xmlkoden...

ska fixatill det och så skickar jag den nya exportern till pelle asap...

//Roger


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-12 14:03:33 - Johan Asplund

Kul att den fungerar och kan komma till användning.

Kan ju nämna att det var ett rent litet h**** att få till '{' och '}' och sen fungerar ju denna bara för C formaterad kod. =)

Men om XMLen innehåller allt som ska foldas så är det nog lite enklare.

Tittar in senare och kollar in den nya XMLen

/Johan


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-12 21:35:14 - Roger Alsing

Hej , nu har jag kodatsönder din xslt lite :P

har fixat så exportern får med alla sektioner rätt och nu exporterar den även ut hur en rad ser ut som collapsad

http://www.compona.com/pelle/kod.xml
http://www.compona.com/pelle/pellekod.zip


där är både öppna och stängda rader synliga (och så är det några kilo mer buggar)
tanken är iaf att när en öppen rad är synlig så ska den stängda raden gömmas och vise versa..

om du har tid och lust får du gärna fortsätta fila på den där nu när all info finns i xml'en ;)

//Roger


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-14 16:29:42 - Simon Dahlbacka

en liten "feature request".. radnumrering skulle vara rätt trevligt/praktiskt att få med om det är möjligt.


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-15 08:31:51 - Johan Asplund

Hej,

vad är tanken med collapsedrow "{...}"? är inte riktigt med här. Fördelen med att ha "{...}" som en bild är ju att man slipper extra tecken när man gör copy direkt ifrån sidan.

/Johan


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-16 13:15:00 - Johan Asplund

Ny version att testa

Försök att inte förstöra den denna gången ;)
Radnummer och copy to clipboard (fungerar nog bara i IE just nu.).

<code>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:user="http://www.pellesoft.se" extension-element-prefixes="msxsl" exclude-result-prefixes="user">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<msxsl:script language="JScript" implements-prefix="user">
var rowNumber = 0;

function getRowNumber()
{
rowNumber++;
if(rowNumber &lt; 10)
res = "0" + rowNumber;
else
res = rowNumber;

return res;
}

//**
//Create a string of spaces
function formatSpace(noOfSpaces)
{
var res = " ";
for(i=0;i&lt;noOfSpaces-1;i++)
{
res += "&amp;nbsp;";
}
return res;
}

//**
//Get unique div neme
function getDivName()
{
return "div" + Math.floor(Math.random() * 99999);
}
</msxsl:script>
<xsl:template match="/root">
<xsl:comment>Johan Asplund 2004-11-16</xsl:comment>
<script language="JavaScript">
/*
Client functions
*/

//**
//Create a string of spaces
function formatSpace(noOfSpaces)
{
var res = "";
for(i=0;i&lt;noOfSpaces;i++)
{
res += "&amp;nbsp;";
}
return res;
}

//**
//Open close div tags
function OpenClose(divId, noOfSpaces)
{
var oDiv;
var oSpan;
oDiv = document.all[divId]
oSpan= document.all['s' + divId];
if(oDiv)
{
if(oDiv.style.display=='none')
{
oDiv.style.display=''
oSpan.innerHTML= "";
}
else
{
oDiv.style.display='none'
oSpan.innerHTML= "&lt;img width='11' onclick='OpenClose(" + "\"" + divId+ "\",\"" + noOfSpaces +"\"" + ")' src='PlusNoLines.gif'&gt;&lt;/img&gt;" + formatSpace(noOfSpaces) + "&lt;img src='closed.gif' &gt;&lt;br&gt;";
}
}
}

//**
//Copy code to clipboard
function copyToClipboard()
{
holdtext.innerText = copytext.innerText;
Copied = holdtext.createTextRange();
Copied.execCommand("RemoveFormat");
Copied.execCommand("Copy");
}

</script>
<table style="background-color:#f5f5f5;width:100%;background-color:#FAFAFA;border: 1px solid #C0C0C0;font-family:Verdana, Lucida Console, Arial;font-size:10px">
<tr>
<td class="Text">
<SPAN ID="copytext">
<xsl:apply-templates select="/root/row"/>
</SPAN>
<TEXTAREA ID="holdtext" STYLE="display:none;"></TEXTAREA>
</td>
</tr>
<tr>
<td>
<input type="button" value="Copy to Clipboard" onclick="copyToClipboard()"></input>
</td>
</tr>
</table>
</xsl:template>

<!-- row template -->
<xsl:template match="row">
<xsl:choose>
<xsl:when test="./childrows">
<xsl:variable name="divId">
<xsl:value-of select="user:getDivName()"/>
</xsl:variable>
<span>
<xsl:attribute name="id">s<xsl:value-of select="$divId"/></xsl:attribute>
</span>
<!--output div-->
<xsl:text disable-output-escaping="yes"><![CDATA[<div style="display=block" id="]]></xsl:text>
<xsl:value-of select="$divId"/>
<xsl:text disable-output-escaping="yes"><![CDATA[">]]></xsl:text>

<img src="minus.gif" width="11" align="top" border="0">
<xsl:attribute name="onclick">OpenClose('<xsl:value-of select="$divId"/>','<xsl:value-of select="string(./childrows//ws[1]/@length + 2)"/>')</xsl:attribute>
</img>
</xsl:when>
<xsl:when test="name(./..) = 'childrows' and position()=last()">
<img src="L.gif" width="11" border="0" align="top"/>
</xsl:when>
<xsl:when test="name(./..) = 'childrows'">
<img src="I.gif" width="11" border="0" align="top"/>
</xsl:when>
<xsl:otherwise>
<img src="clear.gif" border="0" width="11" height="16" align="top"/>
</xsl:otherwise>
</xsl:choose>
<span>
<xsl:value-of select="user:getRowNumber()" disable-output-escaping="yes"/><xsl:value-of select="user:formatSpace(2)" disable-output-escaping="yes"/>
</span>

<xsl:apply-templates select="./*" />
<xsl:choose>
<xsl:when test="name(./..) = 'childrows' and position()=last()">
<xsl:text disable-output-escaping="yes"><![CDATA[</div>]]></xsl:text>
</xsl:when>
<xsl:when test="./childrows">
<!-- do nothing-->
</xsl:when>
<xsl:otherwise>
<br/>
</xsl:otherwise>
</xsl:choose>

</xsl:template>

<!-- collapsedrow template -->
<xsl:template match="collapsedrow">
<!-- <img src="plus.gif" border="0" align="top"/>
<xsl:apply-templates select="./words" />
<br/>
-->
</xsl:template>


<!-- word template -->
<xsl:template match="ws">
<span>
<xsl:value-of select="user:formatSpace(string(@length))" disable-output-escaping="yes"/>
</span>
</xsl:template>

<xsl:template match="words">
<xsl:apply-templates select="./*" />
</xsl:template>


<!-- word template -->
<xsl:template match="word">
<span>
<xsl:attribute name="style">color:<xsl:value-of select="@forecolor"/></xsl:attribute>
<xsl:if test="@bold = 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<b>]]></xsl:text>
</xsl:if>
<xsl:if test="@italic= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<i>]]></xsl:text>
</xsl:if>
<xsl:if test="@underline= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[<u>]]></xsl:text>
</xsl:if>
<xsl:value-of select="."/>
<xsl:if test="@underline= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</u>]]></xsl:text>
</xsl:if>
<xsl:if test="@italic= 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</i>]]></xsl:text>
</xsl:if>
<xsl:if test="@bold = 'true'">
<xsl:text disable-output-escaping="yes"><![CDATA[</b>]]></xsl:text>
</xsl:if>
</span>
<xsl:apply-templates select="./childrows"></xsl:apply-templates>
</xsl:template>

<!-- collapsedrow template -->
<xsl:template match="collapsedrow">
</xsl:template>

<!-- childrows template -->
<xsl:template match="childrows">
<br/>
<xsl:apply-templates select="row">
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
</code>


Mvh
Johan


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-17 18:34:32 - Pelle Johansson

Härligt att se er hjälpas åt - nu börjar det likna nåt! Keep up the good work...


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-17 21:14:36 - Jesper Brännström

Ett önskemål från min sida är att det står vilket programmeringspråk som koden är skriven i när man postar... Bör inte vara så svårt att implementera då man skeriver <code språk> för att välja språk på sin kod.


Svara

Sv: XML/XSLT Nöt

Postades av 2004-11-22 12:16:31 - Johan Asplund

Vad händer Roger? Har du testat den nya XSLen?

/Johan


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 786
27 960
271 761
713
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies