XSLT Bitweise Logik

7

Ich habe einen vorhandenen Datensatz, der eine Ganzzahl zum Speichern mehrerer Werte verwendet. Das Legacy-Frontend hat eine einfache bitweise Überprüfung durchgeführt (z. B. in C #: iValues ​​& amp; 16 == 16), um festzustellen, ob ein bestimmter Wert gesetzt wurde. Ist es möglich, bitweise Operationen in XSL durchzuführen und expliziter Bit-Level-Vergleiche über Maskierung durchzuführen? Das eingebaute "und" wird immer zu "wahr" oder "falsch" führen, aber vielleicht ist es über die mathematischen Operatoren möglich?

Ich verwende derzeit .NET 2.0, das XSLT 1.0 verwendet.

    
pdwetz 09.07.2009, 19:41
quelle

4 Antworten

3

Ich habe in XSLT / XPath nichts dergleichen gesehen. Aber ich habe jemanden gefunden, der diese Art von Operationen manuell implementiert . Vielleicht könnten Sie den gleichen Ansatz verwenden, wenn Sie wirklich brauchen.

    
Grzegorz Oledzki 09.07.2009, 21:17
quelle
13

XSLT ist Turing-vollständig , siehe zum Beispiel hier oder hier , daher kann es gemacht werden. Aber ich habe XSLT nur ein- oder zweimal benutzt und kann keine Lösung geben.

AKTUALISIEREN

Ich habe gerade ein Tutorial gelesen und eine Lösung gefunden, die folgende Tatsache verwendet. bitset(x, n) gibt true zurück, wenn das n -te Bit von x gesetzt ist, andernfalls false.

%Vor%

Die folgende XSLT

%Vor%

wird dieses XML

drehen %Vor%

in ein HTML-Dokument mit einer Tabelle, die die Bits der Zahlen zeigt.

%Vor%

Dies ist weder elegant noch nett in irgendeiner Weise und es gibt wahrscheinlich eine viel einfachere Lösung, aber es funktioniert. Und da es mein erster Kontakt mit XSLT ist, bin ich sehr zufrieden.

    
Daniel Brückner 09.07.2009 20:05
quelle
3

XSLT definiert keine bitweisen Operationen. Wenn Sie sie wollen, müssen Sie Ihre eigenen rollen.

Wenn Sie XSLT speziell im .NET 2.0-Kontext verwenden - also XslCompiledTransform class - dann ist die einfachste Lösung, einen Scripting-Block zu verwenden, um eine C # -Funktion einzuführen, die das tut, und dann einfach folgendes aufrufen:

%Vor%

Sie können auch die übergeordneten Elemente in einem Skriptblock definieren, z. B. HasFlag , und diese dann verwenden.

Wenn Sie ein solches Stylesheet laden, müssen Sie es explizit aktivieren:

%Vor%     
Pavel Minaev 09.07.2009 21:42
quelle
1
%Vor%

Dies wird das binäre Array Ihrer Variablen (gespeichert in $ var)

zurückgeben

Übrigens habe ich XPath 2.0 dazu benutzt

    
Michael Dietrich 24.02.2011 12:30
quelle

Tags und Links