网络掩码在XSL中的速记

问题描述 投票:1回答:2

我正在遇到一些腌菜,我正在制作网络面具的简写(即.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>
    ...

等等等等。然后我才意识到。我想我的想法太多了。必须有一个解决方案来计算这个。网络掩码的可能性太多了。有谁知道如何计算它?

xslt xslt-1.0 subnet
2个回答
1
投票

从理论上讲,它是可能的,但它可能需要非常冗长的代码,尤其是在XSLT1.0中。

Network masks rely heavily on bitwise logicwhich this answer covers in XSLT.但不仅如此,你还需要首先对字符串进行标记,which isn't easy/short in XSLT 1.0

然后你需要验证每个八位字节是否正确(即连续的1后跟连续的0s)。

总而言之,列出31个案例可能只是代码更短,并在某个地方检查自己的小命名模板中的那些案例。可能甚至计算速度更快,因为字符串标记化将是递归的,就像位逻辑一样。


0
投票

另一种选择是跨越XSLT并编写和插入扩展功能。事实上,如果有一个现有的Java静态函数可以做到这一点,一些XSLT处理器(例如Apache Xalan)将允许你直接调用它。这确实意味着放弃一些可移植性,因为您需要确保在运行样式表的任何地方都可以使用相同的扩展,但有时它是最佳解决方案。

不幸的是,我认为标准化的ESXLT扩展功能不包含用于此目的的东西。

© www.soinside.com 2019 - 2024. All rights reserved.