1

如何将在位掩码中指定标志的元素转换为位掩码?我有以下 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 是静态的。是否有另一种方法,或者如何做到这一点?

4

1 回答 1

0

这个 sytlesheet 片段解决了 .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 中调试样式表。

于 2013-04-04T07:13:25.627 回答