VC中怎样实现利用xml和xslt生成html,我调试了半天都没弄出来,看了xml的SDK,针对transformNode他没有给出具体的示例,那位高手麻烦一下,帮忙写一下这个代码可以不?
解决方案 »
- 点击菜单,卡死
- 如何将CString类型的字符串转为UINT类型的ID。
- 小子才疏, 请问VC++是否可以开发涉及SOAP交互的软件?
- 求一个类似于CRectTracker的类,并且能够按照长宽比例改变“拉”出的区域尺寸。
- 使用卫星信道进行数据传输
- +++++++++++++++++++ 怎么用程序读取QQ 的聊天记录?++++++++++++++++++++++++++++++++++
- PlaySound()用异步方式播放时的内存漏洞怎么解决
- 新手的问题
- 同时学习c#和vc++有没有可能。
- GetDlgItem()在主線程序和非主線程內使用時的不同!
- dialog的调用
- 怎么判断某个指针是由哪个类生成的?
http://msdn.microsoft.com/library/en-us/dnsamples/msxslsrc.exe这是ms提供的一个使用xslt的例子,如果你下载不了,给我发邮件,我给你发送过去。
[email protected]顺便提一句:我当时模仿这个例子自己写了一个程序把xml转换为另外一种格式的xml,但是无论如何也无法把UTF-8编码的xml转换后仍然保持UTF-8的编码,最后我只好在程序中调用这个例子编译后的exe文件。至今没有搞明白原因!你用的时候注意。
在这个页面中搜索msxslsrc可以下载!
// Load data.
var source = new ActiveXObject("Msxml2.DOMDocument.3.0");
source.async = false;
source.load("books.xml");
if (source.parseError.errorCode != 0) {
var myErr = source.parseError;
WScript.Echo("You have error " + myErr.reason);
} else {
// Load style sheet.
var stylesheet = new ActiveXObject("Msxml2.DOMDocument.3.0");
stylesheet.async = false
stylesheet.load("sample.xsl");
if (stylesheet.parseError.errorCode != 0) {
var myErr = stylesheet.parseError;
WScript.Echo("You have error " + myErr.reason);
} else {
// Echo back XSLT output to console
WScript.Echo(source.transformNode(stylesheet));
}
}
具体的转换函数如下。下面的函数采用文件流在磁盘下创建了temp.html文件,并将转换后的html文件写进temp.html文件中。
temp.html可以在网页中直接运行。bool ConvertXmlToHtml(CString fileXMLName,CString fileXSLName)
{
MSXML2::IXMLDOMDocumentPtr m_pXMLDoc;
MSXML2::IXMLDOMDocumentPtr m_pXSLDoc;
_bstr_t fileName;
variant_t value;
variant_t vResult;
_bstr_t strBuffer; CoInitialize(NULL); //初始化模块库; //载入XML文件
fileName=fileXMLName.AllocSysString();
HRESULT hr=m_pXMLDoc.CreateInstance(MSXML2::CLSID_DOMDocument);
if(FAILED(hr))
{
AfxMessageBox("创建XML文档失败");
return false;
}
vResult=m_pXMLDoc->load(fileName);
if((bool)vResult==FALSE)
{
AfxMessageBox("载入xml dom文件失败");
return false;
} //载入xsl文件;
fileName=fileXSLName.AllocSysString(); hr=m_pXSLDoc.CreateInstance(MSXML2::CLSID_DOMDocument);
if(FAILED(hr))
{
AfxMessageBox("创建XSL dom文档失败");
return false;
}
vResult=m_pXSLDoc->load(fileName);
if((bool)vResult==FALSE)
{
AfxMessageBox("载入xsl文件失败");
return false;
} strBuffer=m_pXMLDoc->transformNode(m_pXSLDoc);
ofstream outFile("C:\\temp.html");
outFile<<(LPCTSTR)strBuffer;
m_pXMLDoc.Release(); //释放职能指针;
m_pXSLDoc.Release();
CoUninitialize(); //模块反初始化;
return true;
}