C# 处理XML + XSLT转换中HTML元素的输出问题及解决


======================================================
注:本文源代码点此下载
======================================================

随笔- 12

文章- 16

评论- 24

博客园首页新随笔新文章联系管理订阅

c# 处理xml + xslt转换中html元素的输出问题及解决

最近同事手里的一个项目需要用 xslt + xml 输出 microsoft word 格式的 doc文件。考虑到客户机器上安装的不一定是支持 wordml 的 office 2003, 所以xslt + xml输出 wordml 的方案被剔除。此外商业的转换组件价格不菲,似乎也不行。还有就是转换成 rtf 格式,看上去也不容易。因为要输出的东西很简单,只有几个表格和文字,没有复杂的东西,最后采用了 xslt + xml 输出 html 文件的方法,html 改扩展名为 doc,用 word 打开,没有问题,看来这个办法是可行的。

xml 数据里面包含了

这个 html 元素, 但是用 c# 进行 xslttransform 死活就是输出不了

。奇怪的是ie 直接浏览 xml 文件和 javascript 调用 msxml 得到的转换结果却是正常的 -

可以正常的显示出来。文件是这样写的(部分)

xml:

root>

a>aaaaaa

bbbbbb

cccccc]]>a>

root>

xslt:

xsl:value-of disable-output-escaping="yes" select="/root/a"/>

javascript

var xml = new activexobject("msxml2.domdocument.4.0");

xml.load("a.xml");

var xslt = new activexobject("msxml2.domdocument.4.0");

xslt.load("a.xslt");

document.write(xml.transformnode(xslt));

c#

xsltransform xslt = new xsltransform();

xmldocument xml = new xmldocument();

xslt.load("a.xslt");

xml.load(("a.xml"));

using (xmltextwriter writer = new xmltextwriter("a.doc", encoding.default))

{

xslt.transform(xml, null, writer, null);

writer.close();

}

就是上面的这些代码,用浏览器直接看 xml 文件和 javascript 都是正常的输出的结果,就像事先设想的那样:

aaaaaa

bbbbbb

cccccc

但是 c# 那个版本的就是输出不了

, 结果是这样的:

aaaaaabbbbbbcccccc

google 半天找到原来是这样样子的 xmlwriter xmlreader 将忽略 xslt 中的 disable-output-escaping 这个选项(详情参考 http://www.dotnet247.com/247reference/msgs/28/142194.aspx)。将上述 c# 代码中的 xmltextwriter 换成 filestream 一切搞定。

system.io.stream strmtemp = new system.io.filestream("a.doc", system.io.filemode.create, system.io.fileaccess.readwrite);

绿色通道:好文要顶关注我收藏该文与我联系

posted on 2004-11-25 14:23 一切由.net开始 阅读(3660) 评论(6)编辑 收藏

评论

344152

#1楼 回复 引用 查看

笑望人生 | 2004-11-25 17:10

那么,使用xml + xslt 输出成word2003格式的解决方案方法您是否知道哪里有链接,请给出一下,谢谢。

最近有一个项目要用到,谢谢!~

#2楼[楼主] 回复 引用 查看

一切由.net开始 | 2004-11-25 21:07

不好意思,没有亲自做过到 wordml 的转换,但是有一些链接希望有用

http://www.tkachenko.com/blog/archives/000024.html

http://msdn.microsoft.com/library/en-us/fabrikam/html/odc_oftechnical_manual_creation_solution_wordmltransform.asp

http://www.microsoft.com/downloads/details.aspx?familyid=fe118952-3547-420a-a412-00a2662442d9&displaylang=en

http://fo2wordml.sourceforge.net/

#3楼 回复 引用 查看

coding cow | 2004-11-26 11:52

这是一个老问题,我的解决方案是用system.web.ui.htmltextwriter替代xmltextwriter.

#4楼 回复 引用

firn[未注册用户] | 2006-03-06 18:29

大哥,帮了大忙了。谢谢你

注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页

首页博问闪存新闻园子招聘知识库

最新it新闻:

·ios 5.1 beta3文件预示未来 siri有可能支持 ipad和 ipod touch

·android平台12月广告浏览份额51.6% 超越ios

·测试版ios源代码显示ipad 3或将支持siri

·斯蒂芬·霍金的新电脑

·京东商城2.95亿竞得北京商业地一块

» 更多新闻...

最新知识库文章:

·javascript 面向对象编程

·持续集成之“everything is code”

·持续集成之“软件自我识别”

·持续集成之戏说check-in dance

·什么是闭包。
       我的理解

» 更多知识库文章...

china-pub 2011秋季教材巡展

china-pub 计算机绝版图书按需印刷服务


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值