【发布时间】:2009-02-17 13:56:13
【问题描述】:
我有一个 XML 文档和一个随附的 CSS 文件,其中包括页面格式样式(均从 Adobe Framemaker 导出)。我想使用 Windows 窗体或 WPF 在 Web 浏览器控件中导入此数据并显示部分 XML 文档。我不清楚如何使所有这些一起工作。
任何建议都会有所帮助,谢谢。
【问题讨论】:
我有一个 XML 文档和一个随附的 CSS 文件,其中包括页面格式样式(均从 Adobe Framemaker 导出)。我想使用 Windows 窗体或 WPF 在 Web 浏览器控件中导入此数据并显示部分 XML 文档。我不清楚如何使所有这些一起工作。
任何建议都会有所帮助,谢谢。
【问题讨论】:
我采用的方法是获取一个 xslt 翻译,它将原始 xml 格式化为浏览器的 html 编码内容。谷歌搜索“xml pretty print”会发现一个 xslt 转换已准备就绪。
使用 XML 控件完成其余的工作。给它你的 xslt 文件和 xml,它会负责转换 xml。
【讨论】:
webBrowser1.NavigateToStream(parseXmlToHtml(report));
private Stream parseXmlToHtml(string xmlDocument)
{
XmlDocument dat = new XmlDocument();
XslCompiledTransform xslt = new XslCompiledTransform();
MemoryStream outputStream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter (outputStream, System.Text.Encoding.ASCII);
dat.LoadXml(xmlDocument); // or dat.Load("c:\\dat.xml");
xslt.Load("c:\\MonthlyLate.xslt");
xslt.Transform(dat, writer);
outputStream.Position = 0;
return outputStream;
}
【讨论】:
要在内存中执行此操作,请将 Nir 示例的结尾更改为执行以下操作:
StringBuilder sb = new StringBuilder(2500);
XmlWriterSettings settings = new XmlWriterSettings();
XmlWriter dest = XmlWriter.Create(sb, settings);
xslt.Transform(source, dest);;
MessageBox.Show(sb.ToString());
【讨论】:
您不能将 XML 与 CSS 一起使用,您只能将 CSS 与 HTML(或 XHTML)一起使用。
如果 XML 文件是 XHTML,则需要在 head 元素中添加对 CSS 的引用:
<link href="mycss.css" type="text/css" rel="stylesheet" />
如果 XML 文件不是 XHTML,则必须将其转换为 HTML(然后将链接添加到 css)。
正如 kareem 所说,您可以使用 google 找到合适的 XSLT 代码,这是我必须在 C# 中使用 XSLT 的一些代码:
XmlDocument source = new XmlDocument();
source.Load(xmlFilePath);
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltFilePath));
XmlWriterSettings settings = new XmlWriterSettings();
XmlWriter dest = XmlWriter.Create(htmlFilePath, settings);
xslt.Transform(source, dest);
dest.Flush();
dest.Dispose();
您可以在 Web 浏览器控件中的“htmlFilePath”处打开文件。
【讨论】: