Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 从Webdings到Unicode_Xslt_Unicode_Fonts - Fatal编程技术网

Xslt 从Webdings到Unicode

Xslt 从Webdings到Unicode,xslt,unicode,fonts,Xslt,Unicode,Fonts,我必须通过XSLT转换XML文件,该文件包含不同字体类型的字符,如符号、Wingdings、Webdings等 输入如下所示: <p><schar font="Webdings" nr="0081">&#129;</schar></p> <xsl:template match="schar"> <span data-type="schar"> <xsl:choose>

我必须通过XSLT转换XML文件,该文件包含不同字体类型的字符,如符号、Wingdings、Webdings等

输入如下所示:

<p><schar font="Webdings" nr="0081">&#129;</schar></p>
<xsl:template match="schar">
    <span data-type="schar">
        <xsl:choose>
            <xsl:when test="@font = 'Symbol'">
                <xsl:value-of select="dy:resolveSymbolFont(@nr, .)"/>
            </xsl:when>
            <xsl:when test="@font = 'Webdings'">
                <xsl:value-of select="dy:resolveWebdingsFont(@nr, .)"/>
            </xsl:when>
            ...
         </xsl:choose>
    </span>
</xsl:template>
和#129

为了处理它,我编写了如下函数:

<xsl:function name="resolveWebdingsFont" as="xs:string">
    <xsl:param name="hexcode" as="xs:string"/>
    <xsl:param name="fallback" as="xs:string"/>
    <xsl:variable name="hexkey" select="upper-case(replace($hexcode, '^0*(.+)', '$1'))" as="xs:string"/>
    <xsl:variable name="newchar" select="$webdings-character-map[@hex = $hexkey]/@to" as="xs:string?"/>
    <xsl:value-of select="if ($newchar) then $newchar else $fallback"/>
</xsl:function>

我将角色映射放在一个变量中:

<xsl:variable name="webdings-character-map" as="element(char)+">
    ....
    <char hex="81" to="&#x1F6BA;"/>
    <!-- Womens symbol -->
    ...
</xsl:variable>

....
...
我这样调用函数:

<p><schar font="Webdings" nr="0081">&#129;</schar></p>
<xsl:template match="schar">
    <span data-type="schar">
        <xsl:choose>
            <xsl:when test="@font = 'Symbol'">
                <xsl:value-of select="dy:resolveSymbolFont(@nr, .)"/>
            </xsl:when>
            <xsl:when test="@font = 'Webdings'">
                <xsl:value-of select="dy:resolveWebdingsFont(@nr, .)"/>
            </xsl:when>
            ...
         </xsl:choose>
    </span>
</xsl:template>

...
所需的输出是一个
,其值为unicode表示,这对于符号等字体类型很有效

为了正确映射所有Webdings字符,我需要一个完整的Webdings字符列表及其unicode表示形式

在unicode 7.0版(2014年6月)中,它们已被集成。但说明书上说:

著名的“Zapf Dingbats”集合在 丁巴特斯街区,U+2700..U+27BF。其他种类的小蝙蝠,如 Wingdings和Webdings集合编码在各种符号块中,但 大多数是在杂项符号和象形文字中发现的 块,U+1F300..U+1F5FF。“

据我所知,要想得到所有字符及其等价物的完整列表,人们必须查看每个块;但这是我想要避免的。即使我会找到一个看起来类似于某个Webdings符号的符号,我也不能确定它是否是正式代表它的符号。其他人甚至不看similar,但其目的是代表他们

我找不到任何官方文件。 是否存在从Webdings到unicode的正式映射

或者在XSLT中是否有一种完全不同/更好的方法将特殊字符转换为unicode

为了正确地映射所有Webdings字符,我需要一个 所有Webdings字符及其unicode的完整列表 代表性


好的,您只需要在十进制代码值中添加61440。在您的示例中,
;
将变成
;
。这适用于Webdings和Windings/Windings 2/Windings 3字体-我不确定其他字体。

看看。只需查看unicode网站。->“dingbats”“->出发吧。现在,在点击“发布”按钮之前,您确实应该在帖子中输入一些信息。点击编辑链接,把这些信息放在你的问题中,然后删除评论(然后我也可以删除我的评论,因为在你编辑之后这三个评论都应该是完全不必要的),那么你的问题是什么?在我看来,这仍然像是你在寻找一本书、工具、软件库、教程或其他非网站资源。我认为这不起作用。女性符号的十进制值为
128698
61569
是私人使用区域的值。@bauz I在这方面可能已过期。你试过把两者的区别加起来吗,即128698-129?是的,我试过了。不幸的是,似乎没有如此简单和明确的顺序。但这似乎是合乎逻辑的,因为一些Webdings符号已被集成,而其他符号已与现有的unicode字符合并。@bauz如果没有通用算法来转换数字代码,则必须使用查找表。但是你的问题可能会偏离主题。好吧,如果没有找到通用的解决方案,我会接受这个问题。