【发布时间】:2013-04-03 09:16:56
【问题描述】:
如何将在位掩码中指定标志的元素转换为位掩码?我有以下 XML 架构:
我怎样才能转换这个 XML
<Flags>
<Flag>1</Flag>
<Flag>3</Flag>
</Flags>
使用 XSLT 到这个输出 XML 中?
<Bitmask>10</Bitmask>
(10 = 1010 二进制 - 位 1 和 3 已设置)
在程序化编程语言中,我会简单地做这样的事情:
var bitmask = 0;
foreach(var falg in flags) {
bitmask = bitmask + pow(2,flag);
}
但这在 xslt 中是不可能的,因为 xsl:variable 是静态的。是否有其他方法,或者如何做到这一点?
【问题讨论】:
-
XSLT 1.0 还是 2.0,如果前者是哪个 XSLT 处理器?
-
XSLT 2.0 我使用 .NET XslCompiledTransform 作为处理器:msdn.microsoft.com/en-us/library/…
-
如果您使用的是 XslCompiledTransform,那么它是 1.0,而不是 2.0。
-
hmm,对 - 我的样式表中有一个
-
可能有一种方法可以在纯 XSLT 1.0 中将其编写为一组递归模板,但它不会很漂亮,而且正如你所说你正在使用 .NET XslCompiledTransform 它会更简单并且使用
<msxsl:script>编写扩展函数并在 JavaScript/C#/VB 中进行计算可能更有效
标签: xslt