2011-04-14 78 views
2

我使用xslt1.0.This转换HTML到XML是我的HTML片段:转换hexacode在HTML到XML

<span style="font-family: Wingdings;> 
      
    </span> 

我的输出应该是,

<w:sym w:font="Wingdings" w:char="F0D8"/> 

是否有可能在xslt中使用它或使用java.How来标识跨度内的字符代码?由于事先..

+0

好问题,+1。查看我的答案以获取完整的XSLT 2.0解决方案。 – 2011-04-14 13:54:51

回答

1

该XSLT 2.0溶液

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:my="my:my"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/*"> 
    <xsl:value-of select= 
    "my:dec-to-hex(string-to-codepoints(normalize-space()))"/> 
</xsl:template> 

<xsl:variable name="vHexDigits" select="'ABCDEF'"/> 

<xsl:function name="my:dec-to-hex" as="xs:string"> 
    <xsl:param name="pDec" as="xs:integer"/> 

    <xsl:variable name="vQuot" select="$pDec idiv 16"/> 
    <xsl:variable name="vRemainder" select="$pDec mod 16"/> 

    <xsl:sequence select= 
    "if($pDec lt 16) 
    then substring($vHexDigits, $pDec+1, 1) 
    else 
     concat(my:dec-to-hex($vQuot), 
      substring($vHexDigits, $vRemainder+1, 1) 
      ) 
    "/> 

</xsl:function> 
</xsl:stylesheet> 

当施加到所提供的XML文档:

<span style="font-family: Wingdings;">    </span> 

产生完全相同的通缉十六进制表示:

F0D8 
+0

Thanks.But我怎么做或修改在xslt1.0中工作。我如何从xslt1.0迁移到xslt2.0? – vignesh 2011-04-14 14:07:01

+0

+1正确答案。 – 2011-04-14 14:33:17

+0

@vignesh:XSLT 1.0解决方案需要将UNICODE字符映射到代码点的外部源。我认为有一个已经建立了一些地方... – 2011-04-14 14:35:32