![]() |
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:
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.
<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> Mit concat hätte man so vorgehen können:
XML-Code:
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".
select="concat('Formular/Components/edG0', $iBlockNummer, '_Leistungsziffer/@value')"
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:
Aber das ist schlicht und einfach grauenhaft...;)
select="Formular/Components/*[$iBlockNummer + $Offset]/@value"
|
Re: concat: Ergebnis "string" aber Knoten als Erge
Hallo Armin,
Zitat:
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 |
Re: concat: Ergebnis "string" aber Knoten als Erge
Hallo Marabu,
Zitat:
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. |
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:
Mein Ansatz wäre:
<edG01_Leistungsziffer/>
<edG02_Leistungsziffer/>
XML-Code:
Du erkennst den Unterschied gewiss.
<edit name="edG01_Leistungsziffer"/>
<edit name="edG02_Leistungsziffer"/> Freundliche Grüße marabu |
Re: concat: Ergebnis "string" aber Knoten als Erge
Zitat:
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. |
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:
Ich bin sicher du triffst die richtigen Entscheidungen. Lass dich von mir nicht beirren.
<edit name="edG01_Leistungsziffer">foo</edit>
<edit name="edG02_Leistungsziffer">bar</edit> marabu |
Re: concat: Ergebnis "string" aber Knoten als Erge
Zitat:
Der war gut... Erinnert mich irgendwie an die dispensorische Erziehungstheorie...;) Gruß |
Re: concat: Ergebnis "string" aber Knoten als Erge
Zitat:
Freundliche Grüße marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz