用XSLT可以把XML中的数据转化为十六进制显示出来吗?
XSLT可以实现这样的功能吗?如果可以,应该怎么做?
我的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Protocol.xsl"?>
<Protocol>
<HDLC>
<FLAG>01111110</FLAG>
<ADDR>255</ADDR>
<CONTROL>01011010</CONTROL>
<INFO>报文演示</INFO>
<FCS>7C56</FCS>
<FLAG>01111110</FLAG>
</HDLC>
<IP>
<FLAG>911</FLAG>
</IP>
</Protocol>
要求显示出来后,这些值都是十六进制
问题点数:100、回复次数:4Top
1 楼saucer(思归)回复于 2003-09-01 21:47:43 得分 0
see
http://www.dpawson.co.uk/xsl/sect2/N5121.html#d1052e484
or try
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:call-template name="printHex">
<xsl:with-param name="number" select="Protocol/IP/FLAG" />
</xsl:call-template>
</xsl:template>
<xsl:template name="printHex">
<xsl:param name="number">0</xsl:param>
<xsl:variable name="low">
<xsl:value-of select="$number mod 16"/>
</xsl:variable>
<xsl:variable name="high">
<xsl:value-of select="floor($number div 16)"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$high > 0">
<xsl:call-template name="printHex">
<xsl:with-param name="number">
<xsl:value-of select="$high"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:text>0x</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$low < 10">
<xsl:value-of select="$low"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="temp">
<xsl:value-of select="$low - 10"/>
</xsl:variable>
<xsl:value-of select="translate($temp, '012345', 'ABCDEF')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Top
2 楼hellolwl(hello,lwl)回复于 2003-09-01 23:18:25 得分 0
我试了一下,结果不对啊,我把
<xsl:with-param name="number" select="Protocol/IP/FLAG" />
改成<xsl:with-param name="number" select="Protocol/HDLC/FLAG" />
结果是0x10F446,而01111110转化为十六进制应该是7E才对,能不能再帮忙看一下呢,本人接触XML/XSL没几天,谢谢了Top
3 楼saucer(思归)回复于 2003-09-01 23:24:39 得分 100
how does XSLT whether your number is binary or decimal?? the above code only works for decimalTop
4 楼hellolwl(hello,lwl)回复于 2003-09-01 23:28:08 得分 0
I know,3xTop




