pdw*_*etz 7 xslt logic bit-manipulation
我有一个现有的数据集,利用一个整数来存储多个值; 传统前端做了一个简单的按位检查(例如在C#:iValues&16 == 16)以查看是否设置了特定值.是否可以在XSL中进行按位运算,更明确地说,是否可以通过屏蔽进行位级比较?内置的"和"将始终导致"真"或"假",但也许可以通过数学运算符获得?
我目前正在使用.NET 2.0,它使用XSLT 1.0.
Dan*_*ner 14
XSLT是Turing-complete,例如可以在这里或这里看到,因此可以完成.但我只使用了一到两次XSLT并且无法解决问题.
UPDATE
我刚刚再次阅读了一个教程,并使用以下事实找到了解决方案.bitset(x, n)如果设置了n-th位,x则返回true,否则返回false.
bitset(x, n) := floor(x / 2^n) mod 2 == 1
Run Code Online (Sandbox Code Playgroud)
以下是XSLT
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1" style="text-align:center;">
<tr bgcolor="#9acd32">
<th>Number</th>
<th>Bit 3</th>
<th>Bit 2</th>
<th>Bit 1</th>
<th>Bit 0</th>
</tr>
<xsl:for-each select="numbers/number">
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:choose>
<xsl:when test="floor(. div 8) mod 2 = 1">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="floor(. div 4) mod 2 = 1">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="floor(. div 2) mod 2 = 1">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="floor(. div 1) mod 2 = 1">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
将改变这个XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<numbers>
<number>0</number>
<number>1</number>
<number>2</number>
<number>3</number>
<number>4</number>
<number>5</number>
<number>6</number>
<number>7</number>
<number>8</number>
<number>9</number>
<number>10</number>
<number>11</number>
<number>12</number>
<number>13</number>
<number>14</number>
<number>15</number>
</numbers>
Run Code Online (Sandbox Code Playgroud)
到一个HTML文档,其中的表格显示了数字的位数.
Number | Bit 3 | Bit 2 | Bit 1 | Bit 0
---------------------------------------
0 | 0 | 0 | 0 | 0
1 | 0 | 0 | 0 | 1
2 | 0 | 0 | 1 | 0
3 | 0 | 0 | 1 | 1
4 | 0 | 1 | 0 | 0
5 | 0 | 1 | 0 | 1
6 | 0 | 1 | 1 | 0
7 | 0 | 1 | 1 | 1
8 | 1 | 0 | 0 | 0
9 | 1 | 0 | 0 | 1
10 | 1 | 0 | 1 | 0
11 | 1 | 0 | 1 | 1
12 | 1 | 1 | 0 | 0
13 | 1 | 1 | 0 | 1
14 | 1 | 1 | 1 | 0
15 | 1 | 1 | 1 | 1
Run Code Online (Sandbox Code Playgroud)
这既不优雅也不好,并且可能有更简单的解决方案,但它有效.鉴于这是我第一次接触XSLT,我非常满意.
| 归档时间: |
|
| 查看次数: |
8067 次 |
| 最近记录: |