【发布时间】:2018-08-21 16:04:52
【问题描述】:
我有一个具有这种结构的 XML 输入:
<address>
<ip>192.168.7.5</ip>
<netmask>16</netmask>
<wildcard-mask>0.0.0.255</wildcard-mask>
<enable-wildcard-mask>false</enable-wildcard-mask>
</address>
我想创建一个 XSLT 转换,它接受此输入并使用 如果“启用通配符掩码”为真,则为“通配符掩码”值,如果“启用通配符掩码”为假,则为“网络掩码”值。 但是,网络掩码必须从这种格式“24”转换为“255.255.255.0”,并且必须将通配符掩码转换为网络掩码(二进制取反)。
所以这个 XSLT 的输出应该是这样的:
<netmask>255.255.255.0</netmask>
如果“启用通配符掩码”为真,并且
<netmask>255.255.0.0</netmask>
如果“启用通配符掩码”为假。
这是用于测试的 XSLT 框架代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="address">
<xsl:choose>
<xsl:when test="wildcard-mask and (enable-wildcard-mask/text()='true')">
<netmask type="string"><xsl:value-of select="wildcard-mask"/></netmask>
</xsl:when>
<xsl:when test="netmask">
<netmask type="string"><xsl:value-of select="netmask"/></netmask>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
如何在 XSLT 中进行必要的按位转换?
【问题讨论】:
-
最近,EXPath Binary 模块已经可用,它提供了一个用于操作二进制数据的函数库。它在诸如 Saxon 等正在积极开发的产品中可用,但在较旧的 XSLT 1.0 处理器中当然不可用。