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