Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   concat: Ergebnis "string" aber Knoten als Ergebnis erwünscht (https://www.delphipraxis.net/71979-concat-ergebnis-string-aber-knoten-als-ergebnis-erwuenscht.html)

Neuromancer 23. Jun 2006 07:53


concat: Ergebnis "string" aber Knoten als Ergebnis
 
Hallo zusammen,

folgendes Problem:
Hier ein Ausschnitt aus einem xsl:template, das ein anderes Template aufruft:
XML-Code:
<td class="RahmenLeistungsziffer" style="border-left:1px solid black">
  <xsl:call-template name="BuildLeistungszifferBlock">
    <xsl:with-param name="iBlockNummer" select="1" />
    <xsl:with-param name="sLeistungsziffer" select="Formular/Components/edG01_Leistungsziffer/@value" />
    <xsl:with-param name="sAnzahlBehandlungen" select="Formular/Components/edG01_AnzahlBehandlungen/@value" />
    <xsl:with-param name="sBehandlungstageWoche" select="Formular/Components/edG01_BehandlungstageWoche/@value" />
  </xsl:call-template>
</td>
<td class="RahmenLeistungsziffer" style="border-left:1px solid black">
  <xsl:call-template name="BuildLeistungszifferBlock">
    <xsl:with-param name="iBlockNummer" select="2" />
    <xsl:with-param name="sLeistungsziffer" select="Formular/Components/edG02_Leistungsziffer/@value" />
    <xsl:with-param name="sAnzahlBehandlungen" select="Formular/Components/edG02_AnzahlBehandlungen/@value" />
    <xsl:with-param name="sBehandlungstageWoche" select="Formular/Components/edG02_BehandlungstageWoche/@value" />
  </xsl:call-template>
</td>
Natürlich ist es jetzt sehr unschön, dass 4(!) Parameter übergeben werden, wo doch eigentlich einer (nämlich iBlockNummer) völlig ausgereicht hätte.
Mit concat hätte man so vorgehen können:
XML-Code:
select="concat('Formular/Components/edG0', $iBlockNummer, '_Leistungsziffer/@value')"
Nun ist es aber so, dass die Funktion "concat" mir -leider - einen String statt einem ausführbaren XPath-Befehl zurückgibt. Also liefert mir der select auch einen String (nämlich z.B. 'Formular/Components/edG01_Leistungsziffer/@value') anstatt dem Inhalt des Attributs "value" des Knotens "edG01_Leistungsziffer".

Wie bekomme ich es hin, dass der String als XPath und nicht als string interpretiert wird?

Danke für eure Hilfe.

Gruß

//Edit:
Natürlich hätte man auch so vorgehen können:
XML-Code:
select="Formular/Components/*[$iBlockNummer + $Offset]/@value"
Aber das ist schlicht und einfach grauenhaft...;)

marabu 23. Jun 2006 12:15

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Hallo Armin,

Zitat:

Zitat von Neuromancer
Nun ist es aber so, dass die Funktion "concat" mir -leider - einen String statt einem ausführbaren XPath-Befehl zurückgibt.

ich würde es anders ausdrücken: du kannst für den NodeTest keine functions verwenden. Dort funktionieren functions nur im Filter.

Die Übernahme einer laufenden Nummer in den tagname bei edGnn_... hast aber nicht du verbrochen - oder? Ohne diesen Kunstfehler könntest du wahrscheinlich xsl:for-each einsetzen.

Grüße vom marabu

Neuromancer 24. Jun 2006 13:48

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Hallo Marabu,

Zitat:

Zitat von marabu
Die Übernahme einer laufenden Nummer in den tagname bei edGnn_... hast aber nicht du verbrochen - oder? Ohne diesen Kunstfehler könntest du wahrscheinlich xsl:for-each einsetzen.

hmmm...ich habe selbst lange darüber nachgedacht, ob es sich um einen "Kunstfehler" (wie du es nennst) handelt oder nicht. Ergebnis: nein, ist es nicht.

Zur Erklärung:
Die Daten in der XML-Datei sind ein 1:1-Abbild eines Delphi-Formulars wie man vielleicht unschwer erkennen kann. Bei "edGxx_usw." handelt es sich um Edits, die einer Gruppe zugeordnet sind, die aber trotz allem plan auf dem Formular liegen, also nicht in Panels oder Groupboxen organisiert sind.
Aber eben weil diese Komponenten alle in einer Ebene liegen, macht es meiner Meinung nach auch am meisten Sinn, sie in der XML-Datei in einer Ebene zu organisieren.

Das Processing über XSL soll mir lediglich erlauben, endlich unabhängig von Reports (im speziellen Fall vom Report-Builder) zu werden. Sprich: es wird hier nichts zusammengefasst, berechnet oder in tabellarischer Form festgehalten sondern lediglich am Originalformular orientiert ausdruckbar auf die Glotze gebracht. Die <td>-Tags sind lediglich an eine blinde Tabelle gebunden.

Ich hoffe, das ist nachvollziehbar. Falls du trotzdem noch die eine oder andere Anregung hast, bin ich dir - wie immer - dankbar.

Ansonsten Gruß und Dank für deine Hilfe.

marabu 24. Jun 2006 17:55

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Hallo Armin,

natürlich ist deine Abbildung der Controls auf eine XML-Datei praktikabel - keine Frage. Als Ontologe würdest du dir aber die Frage gestellt haben: was ist die Entität und was das Attribut? Hier dein Lösungsansatz - zu Demonstrationszwecken stark vereinfacht:

XML-Code:
<edG01_Leistungsziffer/>
<edG02_Leistungsziffer/>
Mein Ansatz wäre:

XML-Code:
<edit name="edG01_Leistungsziffer"/>
<edit name="edG02_Leistungsziffer"/>
Du erkennst den Unterschied gewiss.

Freundliche Grüße

marabu

Neuromancer 24. Jun 2006 18:04

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Zitat:

Zitat von marabu
Du erkennst den Unterschied gewiss.

Klar sehe ich den...;)

Nur: wo genau ist da der Vorteil? Die Schwierigkeit, einen ganz bestimmten Knoten anzusprechen, hat sich hier nicht vereinfacht, sondern lediglich verschoben, oder habe ich etwas Wichtiges übersehen? Die Methode, über xsl:for-each durchzuiterieren birgt die gleiche Hürde, nämlich mit xsl:if/xsl:choose den Knoten herauszufinden, den ich benötige...
Ich bin leider gesundheitlich etwas angeschlagen, das "Brett vor dem Kopf" will ich also mal lieber nicht ausschließen...;)

Gruß und danke für deine Anregungen.

//Edit:
Man darf auch nicht den Value vergessen, der ja ebenfalls mitgespeichert wird:

XML-Code:
<edG01_Leistungsziffer value="foo"/>
<edG02_Leistungsziffer value="bar"/>
usw.

marabu 24. Jun 2006 18:17

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Meine Sicht auf die Dinge ist sehr abstrakt und völlig ungetrübt von jeder Sachkenntnis, was dein Projekt angeht. Ob das jetzt ein Vorteil ist oder doch eher ein Nachteil - wer weiß. Der Vorteil ist aus meiner Sicht eine semantische Reinheit. An die spätere Verwendung in deinem Projekt denke ich gar nicht - wie auch. Bei deinem Hinweis auf "value" kommt mir noch ein weiterer Gedanke. In XML musst du ja nicht nur entscheiden, was du zum Element machst und was zum Attribut - auch die Frage "ist es element content oder attribute value" kann einem den Schlaf rauben.

XML-Code:
<edit name="edG01_Leistungsziffer">foo</edit>
<edit name="edG02_Leistungsziffer">bar</edit>
Ich bin sicher du triffst die richtigen Entscheidungen. Lass dich von mir nicht beirren.

marabu

Neuromancer 27. Jun 2006 11:54

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Zitat:

Zitat von marabu
In XML musst du ja nicht nur entscheiden, was du zum Element machst und was zum Attribut - auch die Frage "ist es element content oder attribute value" kann einem den Schlaf rauben.

;)
Der war gut...

Erinnert mich irgendwie an die dispensorische Erziehungstheorie...;)

Gruß

marabu 27. Jun 2006 16:32

Re: concat: Ergebnis "string" aber Knoten als Erge
 
Zitat:

Zitat von Neuromancer
Der war gut...

Erinnert mich irgendwie an die dispensorische Erziehungstheorie...

Falscher Alarm, Armin - ich wollte gar nicht in Meyers Fußstapfen treten. Zumindest nicht wissentlich.

Freundliche Grüße

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz