如何将位掩码中指定标志的元素转换为位掩码?我有以下XML Schema:
我如何转换此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:变量是静态的。还有另一种方法,或者如何做到这一点?
答案 0 :(得分:0)
这个sytlesheet fragement解决了.NET XslCompiledTransform类的问题:
<msxsl:script implements-prefix="script" language="C#">
<![CDATA[
public int ToBitmask(XPathNodeIterator node)
{
int bitmask = 0;
while (node.MoveNext())
{
bitmask += Convert.ToInt32(Math.Pow(2, int.Parse(node.Current.Value)));
}
return bitmask;
}
]]>
</msxsl:script>
<xsl:template match="Flags">
<Btimask><xsl:value-of select="script:ToBitmask(Flag)"/></Btimask>
</xsl:template>
但是,我会优先选择纯XSLT解决方案,以便我可以在XmlSpy中调试样式表。