webForumDet fria alternativet

BR problem i XML

9 svar · 1 456 visningar · startad av zino

zinoMedlem sedan jan. 200247 inlägg
#1

Hej! Jag har en logg-fil gjord i xml, log.xml och layouten är gjord i log.xsl och dessa genereras med filen log.asp dvs asp-kod.

När jag skriver in någonting i ett formulär med flera rader (jag trycker på enter för en ny rad i formulärfältet) som sedan sparas i log.xml så visas inte radbrytningarna när logfilen visas.

Vet någon vad detta kan bero på och hur man kan lösa det så att radbrytningarna kommer med i visningen av loggen?

Vet inte riktigt om eller vilken kod jag bör ta med här för att hjälpa till med visualiseringen av problemet, men kanske detta räcker till att börja med? ;)

Tacksam för förslag.

PeddaMedlem sedan juni 20006 032 inlägg
#2

Hur ser radbrytningarna ut i loggfilen?
<br> eller <br />?

zinoMedlem sedan jan. 200247 inlägg
#3

Ingetdera. XML filen är tom innan man skriver in något i tex ett formulär på en annan sida (asp) När man skriver in något i tex ett formulär med flera rader sparas radbrytningarna i xmlfilen/loggfilen på följande sätt:

<task>Krishemsidan uppdaterad. RUBRIK: 'test' TEXT: 1 Detta är en mening!
2 Denna mening kommer under ovanstående mening.
3 Sista meningen.
4 Fler meningar
5 följer</task>

osv. Vet inte om detta klargjorde något?
P.S. Var hittar jag funktionen där jag skirver in kod i mitt inlägg? Så du slipper trötta ut dina ögon ;)

zinoMedlem sedan jan. 200247 inlägg
#4

Får nog redigera min förklaring lite då jag upptäckt några nya saker:

log.xml-filen visar de sparade värdena på följande sätt om man öppnar den direkt i webbläsaren;

<task>Krishemsidan uppdaterad. RUBRIK: 'test' TEXT: 1 Detta är en mening! 2 Denna mening kommer under ovanstående mening. 3 Sista meningen. 4 Fler meningar 5 följer</task>

Dvs utan radbrytningar, men om man öppnar log.xml med tex anteckningar så finns en typ av radbrytningar med och visas som följer;

<task>Krishemsidan uppdaterad. RUBRIK: 'test' TEXT: 1 Detta är en mening!
2 Denna mening kommer under ovanstående mening.
3 Sista meningen.
4 Fler meningar
5 följer</task>

Jag vill ju att "radbrytningarna" ska visas som radbrytningar i webbläsaren, dvs när jag öppnar log.xml i systemet, vilket görs med hjälp av log.asp.

Gjorde detta någon skillnad? ;)

zinoMedlem sedan jan. 200247 inlägg
#5

Har försökt med detta i xsl-filen:

<TD>
<xsl:value-of select="task" />
<BR />
</TD>

"task" innehåller värdet som sparas ifrån formuläret. Det gör dock ingen skillnad. :(

zinoMedlem sedan jan. 200247 inlägg
#6

En annan aproach är kanske detta? Finns det något sätt att deklarera längst upp i xsl filen vilket format man vill använda där man får med tex radbrytningar ifrån ett formulär? Tex i html kan man ju använda PRE för att få ett visst format.

Det jag är ute efter är om det finns något alternativ för att få med radbrytningarna i denna kod:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="4.0" media-type="text/html" encoding="ISO-8859-1"/>

Någon som förstår vad jag menar? ;)

spangoMedlem sedan juni 20008 205 inlägg
zinoMedlem sedan jan. 200247 inlägg
#8

Tackar för hjälpen. Jag tror det är rätt väg att gå, men har inte lyckats att föra in din kod ihop med min. Jag är nybörjare vad gäller XML som ni kanske förstår så jag vet helt enkelt inte hur eller var jag ska lägga in koden och göra de nödvändiga ändringarna.

Här följer min kod i mitt xsl ark:

[CODE]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="4.0" media-type="text/html" encoding="ISO-8859-1"/>

<!-- Catch the sortvalues sent from the asp page -->
<xsl:param name="mySortValue"/>
<xsl:param name="mySortValue2"/>

<xsl:template match="/">

<HTML><HEAD>
<TITLE>The Log</TITLE>
<LINK type="text/css" href="../../style/style.css" rel="stylesheet" />

<SCRIPT LANGUAGE="JavaScript" SRC="../../js/script.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript" SRC="../../js/validate.js"></SCRIPT>

</HEAD>
<BODY BGCOLOR="#FFFFFF" ONLOAD="myProgressBar.style.display = 'none';">

<DIV ID="myProgressBar" STYLE="display:inline">
<BR/> <BR/> <BR/> <BR/>
<CENTER><IMG SRC="../../images/progress_bar2.gif" WIDTH="165" HEIGHT="29" HSPACE="0" VSPACE="0" /></CENTER>
</DIV>

<TABLE CELLPADDING="0" CELLSPACING="1" BORDER="0" WIDTH="100%">

<!-- Use the chosen sort order -->

<xsl:choose>
<xsl:when test="$mySortValue2='null'">

<!-- mySortValue2 is null -->

<!-- show all log data ordered by date -->
<xsl:choose>
<xsl:when test="$mySortValue='date'">

<xsl:for-each select="log/event">
<xsl:sort select="date" order="descending"/>

<TR>
<TD CLASS="a_log_date2">
<xsl:element name="A">
<xsl:attribute name="HREF">log_frames.asp?mySortValue=date<![CDATA[&]]>mySortValue2=<xsl:value-of select="substring-before(date,' ')" /></xsl:attribute>
<xsl:attribute name="TARGET">MainFrame</xsl:attribute>
<xsl:attribute name="CLASS">help</xsl:attribute>
<xsl:attribute name="TITLE">Klicka för att endast se poster från detta datum</xsl:attribute>
<xsl:value-of select="date" />
</xsl:element>
</TD>
<TD CLASS="a_log_origin2">
<xsl:element name="A">
<xsl:attribute name="HREF">log_frames.asp?mySortValue=origin<![CDATA[&]]>mySortValue2=<xsl:value-of select="origin" /></xsl:attribute>
<xsl:attribute name="TARGET">MainFrame</xsl:attribute>
<xsl:attribute name="CLASS">help</xsl:attribute>
<xsl:attribute name="TITLE">Klicka för att endast se poster med detta ursprung</xsl:attribute>
<xsl:value-of select="origin" />
</xsl:element>
</TD>

<TD CLASS="a_log2"><xsl:value-of select="task"/></TD>

<TD CLASS="a_log_done2" ALIGN="MIDDLE">
<xsl:element name="A">
<xsl:attribute name="HREF">
log_frames.asp?mySortValue=done<![CDATA[&]]>mySortValue2=<xsl:value-of select="done" />
</xsl:attribute>
<xsl:attribute name="TARGET">MainFrame</xsl:attribute>
<xsl:attribute name="CLASS">help</xsl:attribute>
<xsl:attribute name="TITLE">Klicka för att endast se poster med detta värde</xsl:attribute>
<xsl:choose>
<xsl:when test="done='Yes'">Ja</xsl:when>
<xsl:otherwise>Nej</xsl:otherwise>
</xsl:choose>
</xsl:element>
</TD>
<TD CLASS="a_log_resp2">
<xsl:element name="A">
<xsl:attribute name="HREF">
log_frames.asp?mySortValue=responsible<![CDATA[&]]>mySortValue2=<xsl:value-of select="responsible" />
</xsl:attribute>
<xsl:attribute name="TARGET">MainFrame</xsl:attribute>
<xsl:attribute name="CLASS">help</xsl:attribute>
<xsl:attribute name="TITLE">Klicka för att endast se poster utförda av denna person</xsl:attribute>
<xsl:value-of select="responsible" />
</xsl:element>
</TD>
</TR>

</xsl:for-each>

</xsl:when></xsl:choose>

</xsl:otherwise>
</xsl:choose>

</TABLE><BR/>

</BODY>
</HTML>

</xsl:template>

</xsl:stylesheet>CODE]

Jag har gjort koden för "task" i fetstil så ni lättare ser den. "task" innehåller värdet ifrån xml filen vilket är innehållet ifrån formuläret med radbrytningar som jag då försöker bibehålla vid visningen av xml-filen.

Så frågan är kan jag och i så fall hur och var komplettera med koden som "spango" bifogade???

:OO

spangoMedlem sedan juni 20008 205 inlägg
#9

Om du lägger till de här två templatesen:

	<xsl:template name="lf2br">
		<!-- import $StringToTransform -->
		<xsl:param name="StringToTransform"/>
		<xsl:choose>
			<!-- string contains linefeed -->
			<xsl:when test="contains($StringToTransform,'&#xA;')">
				<!-- output substring that comes before the first linefeed -->
				<!-- note: use of substring-before() function means        -->
				<!-- $StringToTransform will be treated as a string,       -->
				<!-- even if it is a node-set or result tree fragment.     -->
				<!-- So hopefully $StringToTransform is really a string!   -->
				<xsl:value-of select="substring-before($StringToTransform,'&#xA;')"/>
				<!-- by putting a 'br' element in the result tree instead  -->
				<!-- of the linefeed character, a <br> will be output at   -->
				<!-- that point in the HTML                                -->
				<br/>
				<!-- repeat for the remainder of the original string -->
				<xsl:call-template name="lf2br">
					<xsl:with-param name="StringToTransform">
						<xsl:value-of select="substring-after($StringToTransform,'&#xA;')"/>
					</xsl:with-param>
				</xsl:call-template>
			</xsl:when>
			<!-- string does not contain newline, so just output it -->
			<xsl:otherwise>
				<xsl:value-of select="$StringToTransform"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template name="CopyWithLineBreaks">
		<xsl:param name="string"/>
		<xsl:variable name="Result">
			<xsl:call-template name="lf2br">
				<xsl:with-param name="StringToTransform" select="$string"/>
			</xsl:call-template>
		</xsl:variable>
		<xsl:copy-of select="$Result"/>
	</xsl:template>

Så borde du kunna byta ut <xsl:value-of select="task"/> mot

			<xsl:call-template name="CopyWithLineBreaks">
				<xsl:with-param name="string" select="task"/>
			</xsl:call-template>

hur går det då?

zinoMedlem sedan jan. 200247 inlägg
#10

Jamen, det går ju alldeles utmärkt då! :D Tackar så mycket. Det fungerar perfekt! :D

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)