tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Martin Honnen
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
866
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kickerxy123 kickerxy123 ist offline Mitglied Gold
    Registriert seit
    Mar 2008
    Beiträge
    147
    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-Code:
    <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 xslaram ä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-Code:
    <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...
    Geändert von kickerxy123 (26.01.12 um 16:11 Uhr) Grund: #edit, #update
     
    hilfreiche Antwort? Es gibt einen Danke-Button ;)
    Rettet das Internet!

  2. #2
    Martin Honnen Martin Honnen ist offline Mitglied Bronze
    Registriert seit
    Dec 2011
    Beiträge
    30
    @ABC selektiert ein Attribute namens "ABC", so du dabei den Attributnamen in einem Parameter haben willst, bleibt dir nur
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <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.
    kickerxy123 bedankt sich. 

  3. #3
    kickerxy123 kickerxy123 ist offline Mitglied Gold
    Registriert seit
    Mar 2008
    Beiträge
    147
    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
     
    hilfreiche Antwort? Es gibt einen Danke-Button ;)
    Rettet das Internet!