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 回答