美观的 XML 查看器





5.00/5 (5投票s)
为 Web 应用程序(或其他需求)创建一个美观的 XML 查看器
引言
需要向用户展示简化且带有颜色标记的 XML,以 PDF 格式呈现——这让我开始在 Google 上搜索。但没有找到正确的答案:如何创建美观的可视化 XML?
背景
主要思路是使用 XSLT,简单快捷地生成 HTML,然后可以将 HTML 显示给用户或打印(转换为)PDF 格式。由于我有一个将 HTML 转换为 PDF 的例程——我所需要的只是正确的 XML 转换。
Using the Code
var xmlFile = contentExtractedDir.GetFiles("*.xml").FirstOrDefault();
if (xmlFile != null)
{
XElement contentXml = null;
using (var s = xmlFile.OpenRead())
{
contentXml = XElement.Load(s);
}
xslt = new System.Xml.Xsl.XslCompiledTransform();
xslt.Load(Server.MapPath("App_Data/default.XML.xslt"));
var output = new StringBuilder();
xslt.Transform(contentXml.CreateReader(), null, new StringWriter(output));
// CreatePDFHelper makes PDF routine which can create PDFs from HTML
var pdfHelper = (new Core(base.Context)).CreatePDFHelper();
var outputPdf = pdfHelper.ConvertHtmlToBytes(output.ToString());
}
而且——我找不到的最重要的事情——**正确的 XML 转换**
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40" version="1.0">
<xsl:output method="html" omit-xml-declaration="yes"
encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<head>
<meta http-equiv="content-type"
content="text/html; charset=utf-8" />
<title>XML data</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="*">
<div style="font-weight: normal;
color: #323296;"><<xsl:value-of select="local-name()"/>>
</div>
<div style="margin-left: 8px;">
<xsl:apply-templates select="node()"/>
</div>
<div style="font-weight: normal;
color: #323296;"></<xsl:value-of select="local-name()"/>>
</div>
</xsl:when>
<xsl:otherwise>
<div style="font-weight: normal; color: #643232;"><
<xsl:value-of select="local-name()"/>>
<span style="font-weight: bold; color: #326432;">
<xsl:value-of select="text()"/></span>
</<xsl:value-of select="local-name()"/>></div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>