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);