用于将XML显示为HTML的XSLT

时间:2010-02-18 02:47:17

标签: c# .net html xml xslt

我有一个XML文档(在.net C#web应用程序中),我希望以简单的形式显示(类似于IE)。我需要它与浏览器无关(或尽可能多)并具有一致的显示。

我尝试将xml文档推送为“text / xml”,这是不一致的,并且在某些浏览器中不起作用。

http://sources.redhat.com/ml/xsl-list/2002-02/msg00831.html 这里的链接提供了一种使用样式表将XML转换为HTML / XHTML的好方法。 但是提供的样式表没有用。

第一:这是最好的方法吗?有更好的解决方案吗? 第二:如果没有,有谁知道我在哪里可以找到XSLT?

编辑(澄清):我引用的XSLT将XML转换为XML文件的Internet Explorer样式显示。

提前致谢! :)

3 个答案:

答案 0 :(得分:3)

我认为我最好的方法(就我的情况而言)是编写2个简单的C#方法,从服务器端的XML生成HTML。这有助于减少对浏览器显示XML的依赖(Opera is Crazy!)

(这个例子使用非常简单的格式,这对我的情况很好。 我在IE的XML显示上松散地建模了它。 供其他人参考,以下是方法:

        /// <summary>
    /// Does a simple convert to display an Xml document in HTML.
    /// </summary>
    /// <param name="xmlString"></param>
    private static string ConvertXmlToHtml(string xmlString)
    {
        StringBuilder html = new StringBuilder();

        html.AppendLine("<HTML>");
        html.AppendLine("<HEAD><TITLE>Xml Document</TITLE></HEAD>");

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xmlString);

        html.AppendLine(ConvertXmlElementToHTML(1, doc.DocumentElement));

        html.AppendLine("</HTML>");


        return html.ToString();
    }

    /// <summary>
    /// Converts an XML element (and all of its children) to HTML.
    /// This is a recursive method.
    /// </summary>
    /// <param name="element"></param>
    /// <returns></returns>
    private static string ConvertXmlElementToHTML(int level, XmlNode element)
    {
        int padding = level; // padding (cm == level).

        StringBuilder returnHTML = new StringBuilder();
        if (element is XmlElement)
        {
            // Formatting for symbols to simplify code below.
            string close_bracket = "<SPAN style=\"color: blue\">&gt;</SPAN>";
            string close_bracket_no_children = "<SPAN style=\"color: blue\"> /&gt;</SPAN>";
            string open_bracket = "<SPAN style=\"color: blue\">&lt;</SPAN>";
            string open_bracket_end_el = "<SPAN style=\"color: blue\">&lt;/</SPAN>";
            string el_name = "<SPAN style=\"color: brown\">" + element.Name + "</SPAN>";
            string quote = "<SPAN style=\"color: blue\">\"</SPAN>";
            string equals_sign = "<SPAN style=\"color: blue\">=</SPAN>";

            // Open Element.
            returnHTML.AppendLine("<DIV style=\"margin-left: " + padding + "cm\">" + open_bracket + el_name);

            // Print element attributes.
            foreach(XmlAttribute att in element.Attributes)
            {
                returnHTML.AppendLine(" <SPAN style=\"color: brown\">" + att.Name + "</SPAN>" + equals_sign + quote + "<SPAN style=\"color: black; text-weight: bold\">" + att.Value + "</SPAN>" + quote);
            }

            // If no children, we end the element here with a '/ >'
            // otherwise, we close the element and start to write children '>'
            if (element.ChildNodes.Count == 0)
            {
                returnHTML.AppendLine(close_bracket_no_children + "</DIV>");
            }
            else
            {
                returnHTML.AppendLine(close_bracket + "</DIV>");
            }

            // Print Children. (Recursive call). Note location is IMPORTANT: we need child elements
            // to print after the element is opened and before the element is closed.
            foreach (XmlNode child in element.ChildNodes)
            {
                returnHTML.AppendLine(ConvertXmlElementToHTML(level + 1, child));
            }

            // If we have printed child elements, we need to print a closing element tag.
            if (element.ChildNodes.Count > 0)
            {
                returnHTML.AppendLine("<DIV style=\"margin-left: " + padding + "cm\">" + open_bracket_end_el + el_name + close_bracket + "</DIV>");
            }
        }

        // Return a string of HTML that will display elements at this level and below (child nodes).
        return returnHTML.ToString();
    }

答案 1 :(得分:1)

您尝试使用的样式表仅适用于现代浏览器,不适用于任何版本的IE。在现代浏览器中做这些事情是微不足道的,但在IE中你需要通过javascript和.NET调用MSXML,以便对其他更现代的浏览器(Firefox,Safari,Chrome,Opera,K-Meleon,Konqueror)进行本机转换。 ,主显节,羊群......你明白了。这是IE导致的问题的一部分,因为没有实现XHTML,基本上,这就是你想要做的和其他浏览器所做的事情。

如果你还没有使用我使用的javascript解决这个问题,我会在早上回来查看。

答案 2 :(得分:0)

我即将测试它,但我找到了这个链接:

here

编辑:发现只与IE.grr(某些)相关的作品有效!