簡體   English   中英

XSLT,用於將XML顯示為HTML

[英]XSLT for displaying XML as HTML

我有一個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樣式顯示。

提前致謝! :)

我決定最好的方法(針對我的情況)是編寫2個簡單的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();
    }

您嘗試使用的樣式表僅適用於現代瀏覽器,而不適用於任何版本的IE。 在現代瀏覽器中執行此類操作很簡單,但在IE中,您需要通過javascript和.NET東西調用MSXML,以便對其他現代瀏覽器(Firefox,Safari,Chrome,Opera,K-Meleon,Konqueror)進行本機轉換,主顯節,羊群...。 這是IE因未實現XHTML而導致的問題的全部部分,而XHTML本質上就是您要以及其他所有瀏覽器都要做的事情。

如果您仍然無法使用我使用的javascript解決此問題,我會在早上檢查。

我將要對其進行測試,但我發現此鏈接:

這里

編輯:發現僅適用於IE.grr(某些)版本!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM