我正在为Oracle编写一个PL/SQL工具来从游标中获取XML Spreadsheet。如何使用XSLT 1.0将UTF8 4位数表示转换回原始字符集?
几天后,我得出结论:完成它的最简单方法只是传递Oracle DB提供的XML功能。
所以,我的想法是将查询结果格式化为XML格式,然后通过XSLT获取Excel电子表格。
到目前为止,这么好:我设法从我写的查询中获得电子表格,但我需要解决一个小问题。
我希望能够在Excel中设置列标题只是在我的列上设置别名,但是当我使用不符合XML语言的字符时,我显然会得到与我的意思不同的东西。
select dbms_xmlgen.getxmltype(
'select first_name as "First na/Me"
from hr.employees
where department_id = 100;') from dual;
产生:
<ROWSET>
<ROW>
<First_x0020_na_x002F_Me>Nancy</First_x0020_na_x002F_Me>
</ROW>
<ROWSET>
没有什么能阻止我获得我的Excel,虽然,我然后通过XSLT转换上面的XML文档到Excel 2007兼容的工作簿包含此节点
<Cell>
<Data ss:Type="String">First_x0020_na_x002F_Me</Data>
</Cell>
在这一点上,我只需要在列标题中指示我的XSLT ti搜索“x \ uFFFF”,提取十六进制代码并把它变成相应的角色,但是怎么做呢?
正如在标题中提到的,我的XSLT符合1.0.1
,但我可以根据需要升级到较高版本
,由于Oracle DB中的XSLT 2.0不支持本地支持,因此我无法升级。
“*我的XSLT是1.0兼容的,但可以升级*”我相信你会使用XSLT 2.0,它支持了'码点到字符串()'功能更快乐(以及其他功能,使串处理更容易)。 –
我会看看,看看我能不能完成任务。 – Max
@Max我应该补充说,*可以在XSLT 1.0中完成 - 只要你有一个可能需要恢复的字符的有限列表。但是如果没有正则表达式支持的话,它仍然会相当尴尬。 –