преобразование гексакода в HTML в XML - PullRequest
2 голосов
/ 14 апреля 2011

Я конвертирую HTML в XML с помощью xslt1.0. Это фрагмент моего HTML:

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

Мой вывод должен быть,

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

Можно ли сделать это в xslt или с помощью java. Как определить код символа внутри span? Заранее спасибо ..

1 Ответ

1 голос
/ 14 апреля 2011

Это решение 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="'0123456789ABCDEF'"/>

 <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
...