我需要将十六进制实体从xml转换为xslt中的另一个xml,如下例所示。请建议。
输入:
<?xml version="1.0"?>
<book>
<p>King's College</p>
<p>This is greek Α</p>
<p>This is arrow ⇕</p>
</book>
预期产出:
<?xml version="1.0"?>
<book>
<p>King<font name="Times">'</font>s College</p>
<p>This is greek <font name="Symbol">Α</font></p>
<p>This is arrow <font name="Symbol">⇕</font></p>
</book>
答案 0 :(得分:0)
XSLT在抽象级别上运行,其中数字字符引用已被解析;在相关数据模型中,<p>King's College</p>
和<p>King's College</p>
之间或<p>&x21D5;</p>
和<p>⇕</p>
之间没有区别。
我认为你有三个合理的选择:
使用contains
或(在2.0中)使用您选择的正则表达式函数搜索有问题的字符,并做正确的事情 - 如果您愿意,这不会起作用处理文字撇号和'
不同。
使用sed或Perl - 它很容易编写正则表达式以匹配十六进制数字字符引用,并且保证它们不会跨越多行。您唯一的问题是在sed或Perl中,如果数字字符引用显示在那里,则不容易避免在属性值的中间插入font
标记。
升级您的下游显示技术以正确支持Unicode,并避免使用此类字体转换。
如果是我,我真的更喜欢第三种;如果失败了,其他两个都应该工作,除非您正在处理的XML已经做出了一些非常不幸的设计决策。