У меня есть некоторые проблемы с "charset" в результате преобразования с различными версиями MSXML.
Приведенный ниже код преобразует XML в HTML с MSXML3.0
Dim xmlDoc As New MSXML2.DOMDocument
xmlDoc.async = False
Dim strXML As String
strXML = "<Results><ElapsedTime>3000</ElapsedTime></Results>"
xmlDoc.loadXML(strXML)
Dim xslDoc As New MSXML2.FreeThreadedDOMDocument
xslDoc.async = False
Dim strXSL As String
strXSL = "C:\Test.xsl"
xslDoc.load(strXSL)
Dim xslt As New MSXML2.XSLTemplate
xslt.stylesheet = xslDoc
Dim xslProc As MSXML2.IXSLProcessor
xslProc = xslt.createProcessor
xslProc.input = xmlDoc
xslProc.transform()
Debug.Print(xslProc.output)
================================
Содержимое "Test.xsl" есть,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Results">
<html>
<head>
<title>Report</title>
</head>
</html>
</xsl:template>
</xsl:stylesheet>
===============================
Вывод,
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Report</title>
</head>
</html>
Я не уверен, почему кодировка всегда установлена как "UTF-16" с MSXML3.0
=========================
Затем я изменяю код для использования MSXML4, например,
Dim xmlDoc As New MSXML2.DOMDocument40
...
Dim xslDoc As New MSXML2.FreeThreadedDOMDocument40
...
Dim xslt As New MSXML2.XSLTemplate40
...
=====================
На этот раз вывод:
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>Report</title>
</head>
</html>
В MSXML4.0 не выводится кодировка.
=====================
Подскажите, пожалуйста, какой из них правильный?
Почему различия происходят?