我正在遇到一些腌菜,我正在制作网络面具的速记(即。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>
...
依此类推。然后我才意识到。我想我的想法太多了。必须有一个解决方案来计算这个。网络掩码的可能性太多了。有谁知道如何计算它?
答案 0 :(得分:1)
理论上,它是可能的,但它可能需要非常冗长的代码,尤其是在XSLT1.0中。
Network masks rely heavily on bitwise logic,which this answer covers in XSLT.但不仅如此,您还需要先对字符串进行标记,which isn't easy/short in XSLT 1.0。
然后你需要验证每个八位字节是否正确(即连续1
后跟连续0
s。)
总之,列出31个案例可能只是代码更短,并在某个地方检查自己的小命名模板中的那些案例。可能甚至计算速度更快,因为字符串标记化将是递归的,就像位逻辑一样。
答案 1 :(得分:0)
另一种选择是跨越XSLT并编写和插入扩展功能。事实上,如果有一个现有的Java静态函数可以做到这一点,一些XSLT处理器(例如Apache Xalan)将允许你直接调用它。这确实意味着放弃一些可移植性,因为您需要确保在运行样式表的任何地方都可以使用相同的扩展,但有时它是最佳解决方案。
不幸的是,我并不认为标准化的ESXLT扩展功能包含了用于此目的的东西。