C# 将 XML 转化成 HTML 问题,各位帮帮忙。。。。

shinji19850531 2010-04-27 04:08:08
目前是读取数据库中的数据,通过XmlTextWriter生成XML文件,然后通过XslCompiledTransform加载xsl文件,将生成的XML文件转化成HTML文件。

问题:

1、XslCompiledTransform.transform(xml,html);用这个方法转化的时候输入源是已生成的XML文件,能不能直接在内存中构造出XML的结构,然后直接用transform转成HTML文件呢? 请给出示例代码。

2、数据库中的表有多个,生成的XML数据有嵌套关系。有没有通用的代码将多个表的数据组合成这种含父子关系的XML文件? 请给出示例代码。

譬如:数据库有3个表A、B、C。A与B是1:N的关系,B与C是1:N的关系。生成的XML数据如下:
<?xml version="1.0" encoding="gb2312"?>
<A>
<A1>...</A1>
<A2>...</A2>
<B>
<B1>...</B1>
<B2>...</B2>
<C>
<C1>...</C1>
<C2>...</C2>
</C>
<B3>...</B3>
</B>
<A3>...</A3>
<A4>,..</A4>
</A>


请大家帮帮忙,多提些好的建议。小弟先谢过了。。。。

...全文
657 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgd2012 2011-12-29
  • 打赏
  • 举报
回复
非常想了解lz最后怎么解决这个问题的。
shinji19850531 2010-04-29
  • 打赏
  • 举报
回复
结贴。
shinji19850531 2010-04-29
  • 打赏
  • 举报
回复
问题基本解决了。可以直接转化DataSet。。。。。
thr81111pp 2010-04-28
  • 打赏
  • 举报
回复
JIEFEN
zekelove 2010-04-28
  • 打赏
  • 举报
回复
没做过 不会~~
hhwydwfg 2010-04-28
  • 打赏
  • 举报
回复
10分可用分!
suners 2010-04-27
  • 打赏
  • 举报
回复
ggggggggggggggggg
gll062 2010-04-27
  • 打赏
  • 举报
回复
学习 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复

先谢谢今天各位的热心回复。。。。。我会参照大家的意见再自己试一下的。

小弟下班了,大家有什么好的建议和方法 尽管提出来 。。。。。。。。

明天继续在线等回复。
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 liuyileneal 的回复:]
引用 30 楼 shinji19850531 的回复:
引用 28 楼 jimh 的回复:
DataSet ds = GetDataSet();
MemoryStream source = new MemoryStream();
ds.WriteXml(source )
source.Position = 0;
XPathDocument xpathdoc = new XPathDoc……
[/Quote]

嗯,明天试一下。 先谢了。
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 jimh 的回复:]
一般,我是直接使用Response.OutputStream作为目的流的。
Transform(xsltpath, xpathdoc, Response.OutputStream, null, false);
[/Quote]

我这个是WinForm的,需求是:
从数据库中读取数据,最终生成HTML。 用XSLT+XML方便修改展示信息。

在磁盘上生成XML文件效率比较低,所以想在内存中构造XML结构,调用XSL,直接就转成HTML文件。

能给个从数据库中读取信息并在内存中构造XML结构(主要是多个表组合出嵌套关系)的例子吗?数据表和XML的结构我已经举了例子了。
liuyileneal 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 shinji19850531 的回复:]
引用 28 楼 jimh 的回复:
DataSet ds = GetDataSet();
MemoryStream source = new MemoryStream();
ds.WriteXml(source )
source.Position = 0;
XPathDocument xpathdoc = new XPathDocument(source);
MemoryStream ……
[/Quote]
给这些表添加关系
ds.Relations["A_B"].Nested = true;
设置此属性为true
然后DataSet.WriteXml出的就会有层次效果
liuyileneal 2010-04-27
  • 打赏
  • 举报
回复
你一个楼上的已经说清楚了,不用再说了

第二种
往dataset中添加关系
假如DataSet ds中有表A,表B按照你的格式A的主键作为B的外键
ds.Relations.Add("A_B",A的主键列,B的外键列);
ds.Relations["A_B"].Nested = true;
这样生成的Xml就会有层次关系了
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 jimh 的回复:]
DataSet ds = GetDataSet();
MemoryStream source = new MemoryStream();
ds.WriteXml(source )
source.Position = 0;
XPathDocument xpathdoc = new XPathDocument(source);
MemoryStream dest = new MemorySt……
[/Quote]

XML数据是从多个数据表中组合出来的,有嵌套关系, DataSet.WriteXml能实现这种XML吗?
jimh 2010-04-27
  • 打赏
  • 举报
回复
一般,我是直接使用Response.OutputStream作为目的流的。
Transform(xsltpath, xpathdoc, Response.OutputStream, null, false);
jimh 2010-04-27
  • 打赏
  • 举报
回复
DataSet ds = GetDataSet();
MemoryStream source = new MemoryStream();
ds.WriteXml(source )
source.Position = 0;
XPathDocument xpathdoc = new XPathDocument(source);
MemoryStream dest = new MemoryStream();

Transform(xsltpath, xpathdoc, dest, null, false);
dest.Position = 0;
//好,可以处理dest的数据了
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 jimh 的回复:]
public static void Transform(string xsltpath, IXPathNavigable source, Stream destination, XsltArgumentList arguments, bool enablescript)
{
XslCompiledTransform xslt = new XslCompiledTransform();……
[/Quote]

大哥,我想知道source这个参数是怎么生成的。。 是用MemoryStream生成的吗?

能给个有关MemoryStream构造XML的代码吗?
shinji19850531 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 liuyileneal 的回复:]
引用 20 楼 shinji19850531 的回复:
引用 18 楼 liuyileneal 的回复:
引用 16 楼 shinji19850531 的回复:
引用 11 楼 asharpnet 的回复:
引用楼主 shinji19850531 的回复:
1、XslCompiledTransform.transform(xml,html);用这个方法转化的时候输入源是已生成的XML文件……
[/Quote]

大哥,我不知道如何在内存里表示XML。。。。 请给出示例代码,谢谢。
jimh 2010-04-27
  • 打赏
  • 举报
回复
public static void Transform(string xsltpath, IXPathNavigable source, Stream destination, XsltArgumentList arguments, bool enablescript)
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltpath, new XsltSettings(false, enablescript), null);
xslt.Transform(source, arguments, destination);
}
你创建一个MemoryStream,然后调用就可以了,记得调用完了,如果要使用MemoryStream,记得MemoryStream.Position = 0;
liuyileneal 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 shinji19850531 的回复:]
引用 18 楼 liuyileneal 的回复:
引用 16 楼 shinji19850531 的回复:
引用 11 楼 asharpnet 的回复:
引用楼主 shinji19850531 的回复:
1、XslCompiledTransform.transform(xml,html);用这个方法转化的时候输入源是已生成的XML文件,能不能直接在内存中构造出XML的结构,然后直接用tran……
[/Quote]
你不是说内存中的xml么?你内存中的xml表示形式是什么?不是XmlDocument,XPathDocument么?
加载更多回复(23)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧