如何将包含位标志的XML元素组合到单个值中

时间:2013-04-03 09:16:56

标签: xslt

如何将位掩码中指定标志的元素转换为位掩码?我有以下XML Schema:

enter image description here

我如何转换此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:变量是静态的。还有另一种方法,或者如何做到这一点?

1 个答案:

答案 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中调试样式表。