J
johnsonleee
Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是MSXML 3,执行转换是如下几句:
Template := CoXSLTemplate30.Create;
Template.stylesheet := XSLDoc; // XSLDoc是一个前面创建的IXMLDOMDocument
Processor := Template.createProcessor;
Processor.input := XMLDoc; // XMLDoc是一个前面创建的IXMLDOMDocument
Processor.transform;
wstrHTML := Processor.output;
AList.Text := wstrHTML;
AList.SaveToFile(RSS_CHANNEL_DIR + '/tmp0.rss');
需要利用两个xsl文件,进行两次转换,第一次的转换结果为XML,第二次的转换结果为HTML。
(1) 输入的XML文件的第一行如下:
<?xml version="1.0" encoding="iso-8859-1"?>
...
(2) 执行XML -- >XML的结果:
<?xml version="1.0" encoding="UTF-16"?> //注意:这里是UTF-16
...
其他都是正常的。
(3)执行XML -- >HTML的结果只有一行:
<ul></ul>
如果我把这一步的XSL文件中的输出方法由:
<xslutput method="html"/>
改为
<xslutput method="xml"/>
后,则结果为:
<?xml version="1.0" encoding="UTF-16"?><ul></ul>
如果我把(2)的结果由手工执行,即:
在XML文件中加入:
<?xml:stylesheet ...?>
语句,并把encoding="UTF-16"改为encoding="UTF-8",则执行结果正常(是我所需要的)
上面的原因应是:MSXML执行时unicode的问题,因MSXML Load XML文件时,自动将XML变为了unicode,
但它是将它变为了UTF-16,而不是UTF-8。
请高人指点,分数可商量!!!
Template := CoXSLTemplate30.Create;
Template.stylesheet := XSLDoc; // XSLDoc是一个前面创建的IXMLDOMDocument
Processor := Template.createProcessor;
Processor.input := XMLDoc; // XMLDoc是一个前面创建的IXMLDOMDocument
Processor.transform;
wstrHTML := Processor.output;
AList.Text := wstrHTML;
AList.SaveToFile(RSS_CHANNEL_DIR + '/tmp0.rss');
需要利用两个xsl文件,进行两次转换,第一次的转换结果为XML,第二次的转换结果为HTML。
(1) 输入的XML文件的第一行如下:
<?xml version="1.0" encoding="iso-8859-1"?>
...
(2) 执行XML -- >XML的结果:
<?xml version="1.0" encoding="UTF-16"?> //注意:这里是UTF-16
...
其他都是正常的。
(3)执行XML -- >HTML的结果只有一行:
<ul></ul>
如果我把这一步的XSL文件中的输出方法由:
<xslutput method="html"/>
改为
<xslutput method="xml"/>
后,则结果为:
<?xml version="1.0" encoding="UTF-16"?><ul></ul>
如果我把(2)的结果由手工执行,即:
在XML文件中加入:
<?xml:stylesheet ...?>
语句,并把encoding="UTF-16"改为encoding="UTF-8",则执行结果正常(是我所需要的)
上面的原因应是:MSXML执行时unicode的问题,因MSXML Load XML文件时,自动将XML变为了unicode,
但它是将它变为了UTF-16,而不是UTF-8。
请高人指点,分数可商量!!!