【问题标题】:Parsing string to int, C# inside of an XSL stylesheet在 XSL 样式表中将字符串解析为 int、C#
【发布时间】:2012-08-17 21:34:55
【问题描述】:

我对 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 库,因此为什么这段代码不起作用。关于我应该如何处理这件事有什么建议吗?

【问题讨论】:

标签: c# string parsing xslt int


【解决方案1】:

根本不需要扩展功能!

这种转变

<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

【讨论】:

  • 啊哈!非常感谢,伙计!这让我头疼了三个:P
【解决方案2】:

没有库的字符串到 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;
}

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2021-01-12
    相关资源
    最近更新 更多