代码之家  ›  专栏  ›  技术社区  ›  Russell

用于将XML显示为HTML的XSLT

  •  0
  • Russell  · 技术社区  · 14 年前

    我有一个XML文档(在.NET C Web应用程序中),我希望以其简单的形式显示(类似于IE)。我需要它独立于浏览器(或者尽可能多地独立于浏览器),并且具有一致的显示。

    我试过将XML文档作为“文本/XML”推送,但这是不一致的,在某些浏览器中不起作用。

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

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

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

    事先谢谢!:)

    3 回复  |  直到 14 年前
        1
  •  3
  •   Russell    14 年前

    我决定(在我的情况下)最好的方法是编写两个简单的C方法,从服务器端的XML生成HTML。这有助于减少对浏览器显示XML的依赖(Opera太疯狂了!)

    (这个例子使用了非常简单的格式,这对于我的情况来说很好。 我在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();
        }
    
        2
  •  1
  •   Rob    14 年前

    您试图使用的样式表只能在现代浏览器中使用,不能在任何版本的IE中使用。在现代浏览器中这样做是很简单的,但是在IE中,您需要通过JavaScript和.NET来调用MSXML,以便进行与其他更现代的浏览器(火狐、Safari、Chrome、Opera、K-Meleon、Konque)相同的转换。罗,顿悟,羊群……你明白了。这都是IE不实现XHTML导致的问题的一部分,XHTML本质上是您想要做的,其他浏览器也都是这样做的。

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

        3
  •  0
  •   Russell    14 年前

    我将要测试它,但我发现了以下链接:

    here

    编辑:仅发现与IE.GRR(部分)版本相关的作品!