[XSL] dsQueryResponse

kickerxy123

Erfahrenes Mitglied
Guten Tag,

vorweg: normalerweise beschäftige ich mich eher mich "offline"-Sprachen, wie C. Dem entsprechend habe ich auf dem Gebiet XML/XSL bisher recht wenig Erfahrung und habe ein Problem:
HTML:
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[

($filterLogicExt='contains' and contains(@ABC, $filter)) 
or ($filterLogicExt='startsWith' and starts-with(@ABC, $filter))
or ($filterLogicExt='exactly' and @ABC=$filter) 
or ($filterLogicExt='none') or ($filterLogicExt='')


]" />

Soweit macht es das, was ich erhofft hatte: je nach filterLogicExt filtert er mir die Datensätze die @ABC <-> $filter in der jeweiligen Logik ermittelt.

Allerdings möchte ich @ABC nicht starr im Text haben, sondern dynamisch per xsl:param ändern...

Ich habe leider keine Ahnung, wie ich das machen soll, denn wenn ich einfach @ABC durch $diesistmeinparam ersetze, so wird es wohl deshalb scheitern, dass er den Parameter als String ansieht und nicht in einen XPath auflöst. Vielleicht (sofern ich damit Recht habe) wäre daher meine Frage umzuformulieren: Wie kann ich einen String in ein XPath-Objekt konvertieren?

Ich hoffe, dass ihr mir helfen könnt.


Danke und Gruß,
kickerxy

#edit: Wahrscheinlich unwichtig, aber ich erwähne es mal: Ich verwende SharePoint Server2010 und den zugehörigen SPDesigner

#update:

HTML:
<xsl:variable name="XSL_FilterFieldNode" select="*[local-name() = $filterField_param]" />
//...

($filterLogicExt='contains' and contains($XSL_FilterFieldNode, $filter)) 
//...

scheint auch nicht zu funktionieren. Obwohl das Konstrukt - zumindest nach meiner Recherche - den String konvertieren sollte...
 
Zuletzt bearbeitet:
@ABC selektiert ein Attribute namens "ABC", so du dabei den Attributnamen in einem Parameter haben willst, bleibt dir nur
Code:
<xsl:param name="att-name" select="'ABC'"/>

<xsl:template match="foo">
  ...
 <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[

($filterLogicExt='contains' and contains(@*[local-name() = $att-name], $filter))  .../>

  ...
</xsl:template>
Das sollte reichen, so es nur um Attributnamen geht, bei Elementnamen kann man dann analog contains(*[local-name() = $el-name], $filter) nehmen.

Vollständige XPath-Pfadausdrücke in einem Parameter zu haben und dann dynamisch zu evaluieren erfordert einen XSLT-Prozessor, der das als Erweiterung anbietet.
 
Hallo Martin,

es ging mir um Attributnamen. Deine Lösung in dem CODE-Bereich ist genau das, was ich gesucht habe. Funktioniert super - vielen Dank!

Gruß,
kickerxy
 
Zurück