我遇到了一点麻烦,在那里我正在把网络掩码制作成速记。255.255.255.0
= /24
)
我做了很多谷歌搜索,奇怪的是,从来没有人问过如何在XSL中计算这个。
所以我想出了自己的解决方案:为什么不做一大堆的陈述,比如:
<xsl:choose>
<xsl:when test="'255.255.255.0'">
<xsl:value-of select="'/24'"/>
</xsl:when>
<xsl:when test="'255.255.0.0'">
<xsl:value-of select="'/16'"/>
</xsl:when>
...
以此类推。然后我意识到。我想我想得太多了。必须有一个解决方案来计算这一点。网络掩码的可能性太多了。有人知道怎么算吗?
发布于 2014-02-04 03:30:44
从理论上讲,这是可能的,但它可能需要非常冗长的代码,特别是在XSLT1.0中。
网络掩码严重依赖位逻辑。,这个答案包含在XSLT中。,但不仅如此,您还需要首先标记字符串,这在XSLT1.0中并不容易/很短。
然后,您需要验证每个八进制是否正确(即连续的1
和连续的0
s)。
总之,从代码上看,列出31种情况的代码可能更短,并在某个地方对照自己的小命名模板进行检查。计算速度可能更快,因为字符串标记化将是递归的,比特逻辑也是如此。
发布于 2014-02-04 07:56:35
另一种选择是跳出XSLT,编写并插入扩展函数。事实上,如果存在一个现有的Java静态函数来实现这一点,那么一些XSLT处理器(例如Apache )将允许您直接调用它。这确实意味着放弃一些可移植性,因为您需要确保在运行样式表的任何地方都可以使用相同的扩展,但有时这是最好的解决方案。
不幸的是,我不认为标准的ESXLT扩展函数包含了用于此目的的内容。
https://stackoverflow.com/questions/21540928
复制相似问题