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.
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.
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.
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.
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:
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%Dies wird das binäre Array Ihrer Variablen (gespeichert in $ var)
zurückgebenÜbrigens habe ich XPath 2.0 dazu benutzt
Tags und Links xslt bit-manipulation logic