在xslt转换中查找十六进制实体和代码span元素

时间:2014-03-04 09:00:00

标签: xml entity xslt-1.0

我需要将十六进制实体从xml转换为xslt中的另一个xml,如下例所示。请建议。

输入:

<?xml version="1.0"?>
<book>
<p>King&#x00027;s College</p>
<p>This is greek &#x00391;</p>
<p>This is arrow &#x021D5;</p>
</book>

预期产出:

<?xml version="1.0"?>
<book>
<p>King<font name="Times">&#x00027;</font>s College</p>
<p>This is greek <font name="Symbol">&#x00391;</font></p>
<p>This is arrow <font name="Symbol">&#x021D5;</font></p>
</book>

1 个答案:

答案 0 :(得分:0)

XSLT在抽象级别上运行,其中数字字符引用已被解析;在相关数据模型中,<p>King&#x27;s College</p><p>King's College</p>之间或<p>&x21D5;</p><p>⇕</p>之间没有区别。

我认为你有三个合理的选择:

  • 使用contains或(在2.0中)使用您选择的正则表达式函数搜索有问题的字符,并做正确的事情 - 如果您愿意,这不会起作用处理文字撇号和&#x27;不同。

  • 使用sed或Perl - 它很容易编写正则表达式以匹配十六进制数字字符引用,并且保证它们不会跨越多行。您唯一的问题是在sed或Perl中,如果数字字符引用显示在那里,则不容易避免在属性值的中间插入font标记。

  • 升级您的下游显示技术以正确支持Unicode,并避免使用此类字体转换。

如果是我,我真的更喜欢第三种;如果失败了,其他两个都应该工作,除非您正在处理的XML已经做出了一些非常不幸的设计决策。