2

私は XSL スタイルシートにかなり慣れていないので、ここで我慢してください。

.xsl に C# ブロックが埋め込まれています。数字の文字列(例:「1,3,5」)を受け取るものが必要なため、そこにあります。「、」の数字にしたい。コード ブロックは XSL ループの一部であるため、それがどの反復にあるかを渡し、その番号を文字列を介して入ってきたリストと比較します。反復回数がリストにある場合、true を返します。そうでない場合は、False を返します。文字列は「all」として受け取ることもできます。その場合、true を返します。

これは私が思いついたものです:

<msxsl:script language="c#" implements-prefix="user">
    <![CDATA[

        public bool showStoryImg(string desiredImgs, int currentNum){
            bool rtnVal = false;
            try
            {
                if (desiredImgs == "all")
                {
                    rtnVal = true;
                }
                else
                {
                    string[] numStrArr = desiredImgs.Split(',');
                    int[] values = new int[numStrArr.Length];
                    for(int x = 0; x < numStrArr.Length; x++)
                    {
                       values[x] = Convert.ToInt32(numStrArr[x].ToString());
                    }

                    foreach(int y in values)
                    {
                        if(currentNum == y){
                            return true;
                        }
                        else
                        {
                            rtnVal = false;
                        }
                    }
                }
            }
            catch(Exception e)
            {
                rtnVal = false;
            }
            return rtnVal;
        }
    ]]>
</msxsl:script>

しかし、私の問題は、XSL には .NET ライブラリを使用する方法がないため、このコードが機能しないことです。これについてどうすればよいかについて何か提案はありますか?

4

2 に答える 2

3

拡張機能は一切不要!

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:param name="pImages" select="'1,3,5'"/>

 <xsl:variable name="vImages" select="concat(',',$pImages, ',')"/>

 <xsl:template match="/*">
     <xsl:apply-templates select=
     "img[contains($vImages, concat(',',position(),','))]/@src"/>
 </xsl:template>
</xsl:stylesheet>

次の XML ドキュメントに適用した場合(質問には何も提供されていません!):

<images>
  <img src="Image1.jpg"/>
  <img src="Image2.jpg"/>
  <img src="Image3.jpg"/>
  <img src="Image4.jpg"/>
  <img src="Image5.jpg"/>
</images>

$pImagesパラメータで指定された位置を持つ要素のみを処理します。この場合は、src属性を出力するだけです:

Image1.jpgImage3.jpgImage5.jpg
于 2012-08-18T03:49:26.923 に答える
0

ライブラリを使用せずに string を int に変換することはそれほど難しくありません (String.Split が機能していると仮定します)

// untested, off-the-cuff
for(int x = 0; x < numStrArr.Length; x++)
{
   int temp = 0;

   for(int y= 0; y < numStrArr[x].Length; y++)
   {
       temp *= 10;
       temp += (numStrArr[x][y] - 48);
   }

   values[x] = temp;
}
于 2012-08-17T21:46:51.990 に答える