日期:2014-05-18  浏览次数:20942 次

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

------解决方案--------------------
探讨
1、XslCompiledTransform.transform(xml,html);用这个方法转化的时候输入源是已生成的XML文件,能不能直接在内存中构造出XML的结构,然后直接用transform转成……

------解决方案--------------------
探讨

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

------解决方案--------------------
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);