C# 将 XML 转化成 HTML 问题,各位帮帮忙。。。。目前是读取数据库中的数据,通过XmlTextWriter生成XML文件,然后
C# 将 XML 转化成 HTML 问题,各位帮帮忙。。。。
目前是读取数据库中的数据,通过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 code<?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>
请大家帮帮忙,多提些好的建议。小弟先谢过了。。。。
[解决办法]内存中生成?直接生成临时文件,用完删掉吧。
[解决办法]应该可以
http://msdn.microsoft.com/zh-cn/library/system.xml.xsl.xsltransform.transform(v=VS.90).aspx
这个函数有10多个重载,你看哪个可以用
[解决办法]试试DataSet自带的转XML
[解决办法]public static string Convert(string html)
{
if (string.IsNullOrEmpty(html.Trim()))
{
return string.Empty;
}
using (SgmlReader reader = new SgmlReader())
{
reader.DocType = "HTML";
reader.InputStream = new StringReader(html);
using (StringWriter stringWriter = new StringWriter())
{
using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
{
reader.WhitespaceHandling = WhitespaceHandling.None;
writer.Formatting = Formatting.Indented;
XmlDocument doc = new XmlDocument();
doc.Load(reader);
if (doc.DocumentElement == null)
{
return string.Empty;
}
else
{
doc.DocumentElement.WriteContentTo(writer);
}
writer.Close();
string xhtml = stringWriter.ToString();
return xhtml;
}
}
}
}
[解决办法][解决办法][解决办法] 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;
[解决办法]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的数据了
[解决办法]
你一个楼上的已经说清楚了,不用再说了
第二种
往dataset中添加关系
假如DataSet ds中有表A,表B按照你的格式A的主键作为B的外键
ds.Relations.Add("A_B",A的主键列,B的外键列);
ds.Relations["A_B"].Nested = true;
这样生成的Xml就会有层次关系了