xml - XSLT - 减去 IP 地址范围以查找主机数

标签 xml xslt

所以我有两个 IP 地址,一个 endIP 和一个 startIP。必须根据 IP 地址范围计算主机数。

我测试了一个示例,起始 IP 地址为 192.168.2.188,有 88 个主机。所以我得到的结束地址是 192.168.3.19。但是,我的 xml 文件中没有 88 台主机的记录(因为它是自动生成的),我应该如何找到主机数?

所以我做了一个 <xsl:value-of select="endIP - startIP"/>认为它至少会给我剩下的。但是,在我解析它之后返回了一个“NaN”。算一下,因为它是多位小数。我对 XSL 不是很熟悉,所以这让我很头疼。

我完全不知道如何根据 IP 地址范围计算主机号。任何帮助将不胜感激。

最佳答案

实现此目的的一种方法是将 ip 代码转换为整数,然后进行减法。当然,这对子网中的主机数量做出了一些隐含的假设。

对于这个输入文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<HOSTS>
  <HOST ID="a" IP="192.168.2.188"/>
  <HOST ID="b" IP="192.168.3.19"/>
</HOSTS>

您可以使用以下 XSLT 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template name="ip_to_number">
    <xsl:param name="ip"/>
    <xsl:variable name="ip1" select="substring-before($ip, '.')"/>
    <xsl:variable name="ip2" select="substring-before(substring-after($ip, concat($ip1, '.')), '.')"/>
    <xsl:variable name="ip3" select="substring-before(substring-after($ip, concat($ip1, '.', $ip2, '.')), '.')"/>
    <xsl:variable name="ip4" select="substring-after($ip, concat($ip1, '.', $ip2, '.', $ip3, '.'))"/>
    <xsl:value-of select="(((number($ip1) * 256) + number($ip2)) * 256 + number($ip3)) * 256 + number($ip4)"/>
  </xsl:template>

  <xsl:template match="/HOSTS">

    <xsl:variable name="number_a">
      <xsl:call-template name="ip_to_number">
        <xsl:with-param name="ip"><xsl:value-of select="HOST[@ID='a']/@IP"/></xsl:with-param>
      </xsl:call-template>
    </xsl:variable>

    <xsl:variable name="number_b">
      <xsl:call-template name="ip_to_number">
        <xsl:with-param name="ip"><xsl:value-of select="HOST[@ID='b']/@IP"/></xsl:with-param>
      </xsl:call-template>
    </xsl:variable>

    <xsl:text>Number of hosts: </xsl:text><xsl:value-of select="$number_b - $number_a + 1"/>

  </xsl:template>
</xsl:stylesheet>

结果是:

Number of hosts: 88

您可以编写另一个帮助程序模板来计算两个 ip 号之间的差异。此外,您可能希望更改模板,使其直接从源文档中提取 IP 号码,而不是将它们作为参数传递。

关于xml - XSLT - 减去 IP 地址范围以查找主机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483054/

相关文章:

xslt - 使用 XSLT 将非编号列表转换为编号列表

java - 如何使用 Java 在 XML 中考虑标签名称及其属性来获取值

xml - 信息路径 2010 : no publish button

android - ImageButton 提升问题

java - 与使用 DOM 解析器手动解析 XML 文件相比,使用 XSLT 样式表有什么优势吗?

xml - Xslt 等于性能提升

java - 如何动态读取xml节点值?

xml - 使用 Augeas 创建或更新 XML 文件中的部分

c# - 以编程方式创建文件以导入 Quicken?

php - 如何将 CSS 格式应用于 EXCEL 表单输入字段