You are not logged in.


T.C

Neuer Clubber

  • "T.C" started this thread

Posts: 20

Location: Deutschland

Occupation: Student

  • Send private message

1

Monday, June 23rd 2008, 1:04pm

Variable im Xml Quellcode verwenden

Hallo Leute,

ich würde gerne eine Variable in meinem Xml-Quellcode verwenden und diese nur im Stylesheet initieren. D.h. wenn ich z.B. Adressen in meinem Quellcode habe möchte ich dafür nur einen Platzhalter im Quellcode einsetzen und die tatsächliche addr. im Stylesheet angeben um bei Änderungen nicht in den ganzen Quellcodes die adresse ändern zu müssen.

Ich verwende XSl-Fo zur Pdf Generierung. Bisher habe ich nur Variablen gefunden die nur innerhalb des Stylesheets Verwendung finden.

Kann mir jemand dies bezüglich Tipps geben :) ?

Gruss
T.C
Erst durch Erfahrung erhält man Wissen. Alles andere sind nur Informationen.

ogl_dev

Moderator

Posts: 1,722

Location: TG - Schweiz

Occupation: Informatikstudent ETH Zürich

  • Send private message

2

Monday, June 23rd 2008, 3:04pm

Hi!

Du könntest doch im Quelldokument einfach einen leeren Tag hinmachen, wo die Informationen hinsollten. Im Stylsheet erstellst du dann eine Regel für diesen Tag, der die Adresse ausgibt.

Quelltext:

Source code

1
2
3
4
5
6
<?xml ... ?>
<base>
     <adressen>
          <adresse1/>
     </adressen>
</base>


Stylesheet:

Source code

1
2
3
4
5
6
7
[...]
<xsl:template match="adresse1">
     Hans Muster
     Musterstrasse 4
     Stadt
</xsl:template>
[...]


So irgendwie müsste das doch machbar sein.

mfg, ogl_dev

T.C

Neuer Clubber

  • "T.C" started this thread

Posts: 20

Location: Deutschland

Occupation: Student

  • Send private message

3

Wednesday, June 25th 2008, 2:54pm

Hallo,

es wäre schön wenn es so einfach wäre. So geht es bestimmt nicht :(



Gruss

T.C
Erst durch Erfahrung erhält man Wissen. Alles andere sind nur Informationen.

ogl_dev

Moderator

Posts: 1,722

Location: TG - Schweiz

Occupation: Informatikstudent ETH Zürich

  • Send private message

4

Wednesday, June 25th 2008, 3:15pm

Aha. Ja also mit der Antwort kann ich jetzt nicht viel anfangen. Habe ich die Aufgabe falsch verstanden, oder was genau soll damit bestimmt nicht gehen?

exnase

Active Clubbers

Posts: 696

Location: STD

Occupation: Nicht mehr Student

  • Send private message

5

Wednesday, June 25th 2008, 4:19pm

Hi, ich denke es leigt daran dass der FO-processor reinen Text ignoriert.
Probiers mal so:

Source code

1
2
3
4
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
   <bla />
</test>



Stylesheet:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
					 xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
	<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>

   <!-- ========================= -->
	<!-- root element:         	-->
	<!-- ========================= -->
	<xsl:template match="/">
		<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<!-- (1. Define the page margins) -->
			<fo:layout-master-set>
				<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm"
						margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
					<fo:region-body region-name="Content"/>
				</fo:simple-page-master>
			</fo:layout-master-set>

<!-- (2. For the page layout refer to the master layout)-->
			<fo:page-sequence master-reference="simpleA4">
				<fo:flow flow-name="Content">
					<fo:block font-size="10pt" font-family="Courier">
              	<xsl:apply-templates select="//bla" />
					</fo:block>
				</fo:flow>
		   </fo:page-sequence>
		</fo:root>
	</xsl:template>

	<xsl:template match="//bla">
	   <fo:block>Hallo, XSL-FO Welt.</fo:block>
	</xsl:template>
</xsl:stylesheet>


Mit Apache-FOP funktioniert dass (wenn ich richtig verstanden habe, was du machen willst).

mfg exnase
Wer nichts weiß und weiß, dass er nichts weiß, weiß mehr als einer, der nichts weiß und nicht weiß, dass er nichts weiß!
Meine Software hat keine Fehler. Sie entwickelt nur manchmal zufällige Features!

ogl_dev

Moderator

Posts: 1,722

Location: TG - Schweiz

Occupation: Informatikstudent ETH Zürich

  • Send private message

6

Wednesday, June 25th 2008, 5:53pm

Hab ja gesagt "so irgendwie".

T.C

Neuer Clubber

  • "T.C" started this thread

Posts: 20

Location: Deutschland

Occupation: Student

  • Send private message

7

Monday, August 11th 2008, 11:16am

Hallo,

ich habe eure Ratschläge versucht umzusetzen. Bei mir sieht das jetzt so aus

<!-- Testing Parameter -->
<xsl:template match="s">
<fo:block>
<xsl:choose>
<xsl:when test="@outputclass = 'test'">
<fo:block>Hallo,Parameter</fo:block>
<xsl:apply-templates/>
</xsl:when>
<xsl:when test="@id = 'test'">
<fo:block>Hallo,Parameter</fo:block>
<xsl:apply-templates/>
</xsl:when>
</xsl:choose>
</fo:block>
</xsl:template>



Es wird auch "Hallo, Parameter" soweit angezeigt. Ich habe jetzt noch zwei Probleme die jetzt noch lösen muss, zum einen wird an der stelle an der mein Text angezeigt wird eine neue Zeile begonnen, das will ich nicht zum anderen würde ich gerne den Text noch formatieren;)

d.h. etwa so

Str.

Plz

land

Das ist glaube ich jetzt ziemlich verzwickt oder ?
Erst durch Erfahrung erhält man Wissen. Alles andere sind nur Informationen.

ogl_dev

Moderator

Posts: 1,722

Location: TG - Schweiz

Occupation: Informatikstudent ETH Zürich

  • Send private message

8

Monday, August 11th 2008, 9:54pm

Hi!

Naja, so verzwickt wird es auch wieder nicht sein. Das Problem mit den Absätzen: Jeder fo:block ist glaub ich als ein Block zu nehmen, also auch ein Absatz. Das <s> generiert dir deshalb etwas wie <fo:block><fo:block>Hallo, Parameter</fo:block></fo:block>. Es ist aber eigentlich schon unsinnig, zwei verschachtelte Blöcke für nur ein Stück Text zu machen. Wenn du nun willst, dass kein neuer Absatz entsteht, so darfst du keinen Block machen. Du müsstest das ganze dann aber schon noch in einen Block einbinden. Das mein ich:

Source code

1
2
3
4
5
6
7
8
9
<!-- XML-Datei -->
<base>
     <fo:block>Das ist ein "<s>".</fo:block>
</base>

<!-- Stylesheet -->
<xsl:template match="s">
<xsl:text>Hallo Welt</xsl:text>
</xsl:template>

Erkennst du, was ich meine? ACHTUNG: Komme nicht auf die Idee, <xsl:text> erzeuge einen Text ohne Absatz. text gehört zum Namespace 'xsl', hat also nichts mit XML-FO (Namespace 'fo') zu tun und deshalb keinen Zusammenhang mit der Gestaltung der Seite. Es fügt lediglich das "Hallo Welt" in den restlichen Text der XML-Datei ein (Dieser Text steht dann sinnigerweise in einem <fo:block>).

Das Untereinander sollte doch einfach durch mehrere Blocks erreicht werden, oder nicht?

Gruss, ogl_dev

PS: Das nächste mal CODE-Tags verwenden!

Social bookmarks

Rate this thread