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);
}

しかし、xsl:variable は静的であるため、これは xslt では不可能です。別のアプローチがありますか、またはこれを行うにはどうすればよいですか?

4

1 に答える 1

0

このスタイルシート フラグメントは、.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>

ただし、XmlSpy 内でスタイルシートをデバッグできるように、純粋な XSLT ソリューションを使用したいと思います。

于 2013-04-04T07:13:25.627 に答える