【问题标题】:XSLT works in IE, but nowhere else [duplicate]XSLT 在 IE 中工作,但在其他地方没有 [重复]
【发布时间】:2016-09-21 10:13:56
【问题描述】:

我到处都看到过这个问题的变体,但所提供的解决方案似乎都没有奏效。这意味着我的代码/设置中可能还有其他一些我看不到的问题。

我正在尝试为一个亲戚创建一个站点,但我在使用 XSLT 样式表时遇到了问题。它在 Chrome 或 Firefox 中似乎没有任何作用,但它在 IE10 中运行良好。这是什么,但不是我所追求的。

该站点是在 IIS 10 中设置的,我可以使用本地 url 浏览到它。

XML 是从存储过程构建的,在 C# 中调用:

private void buildXML()
    {
        con = new SqlConnection("server=DESKTOP-[SERVERNAME]; database= local; persist security info=True; Integrated Security=SSPI;");
        cmd = new SqlCommand("dbo.setIndexXMLData", con);
        cmd.CommandType = CommandType.StoredProcedure;
        con.Open();
        string xmlPrefix = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><?xml-stylesheet type=\"text/xml\" href=\"/XSLT/Index.xslt\"?>";
        xRead = cmd.ExecuteXmlReader();
        xRead.Read();
        xmlPrefix += Environment.NewLine + xRead.ReadOuterXml();
        pXml.LoadXml(xmlPrefix);
        Response.Write(pXml.OuterXml);


        // Define the contents of the XML control
        xDoc.DocumentContent = xmlPrefix;
        // Specify the XSL file to be used for transformation.
        xDoc.TransformSource = Server.MapPath("/XSLT/Index.xslt");

    }

生成这个 xml:

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xml" href="/XSLT/Index.xslt"?>
<Site>
  <MENU>
    <SiteMenu Title="[sitename]" Linkpath="/default.aspx" displayOrder="0" />
    <SiteMenu Title="Infomation" Linkpath="/information.aspx" displayOrder="1" />
    <SiteMenu Title="News" Linkpath="/news.aspx" displayOrder="2" />
    <SiteMenu Title="Menu" Linkpath="/menu.aspx" displayOrder="3" />
    <SiteMenu Title="Gallery" Linkpath="/gallery.aspx" displayOrder="4" />
    <SiteMenu Title="Contact" Linkpath="/contact.aspx" displayOrder="5" />
    <SiteMenu Title="Catering" Linkpath="/catering.aspx" displayOrder="6" />
  </MENU>
  <SLIDES>
    <SlideShow imgPath="/20160806_182949.jpg" displayOrder="1" />
    <SlideShow imgPath="/20160901_193700.jpg" displayOrder="2" />
    <SlideShow imgPath="/14202562_319650221718312_9092982335636542049_n.jpg" displayOrder="3" />
    <SlideShow imgPath="/14237745_319766348373366_7639011255502415884_n.jpg" displayOrder="4" />
  </SLIDES>
</Site>

它应该用这个 XSLT 转换,但它似乎没有加载:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method='xhtml' indent='yes' doctype-public='"-//W3C//DTD XHTML Basic 1.1//EN"' doctype-system='"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'/>
  <xsl:template match="/">

    <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">
        <title>WEBSITE NAME</title>
        <link rel="stylesheet" runat="server" href="Assets/styles.css" />
        <script src="/Assets/jquery-3.1.0.min.js"></script>
        <script type="text/javascript" src="/Assets/scripts.js"></script>
        <link rel="icon" href="favicon.ico" type="image/x-icon"/>
        <link href="https://fonts.googleapis.com/css?family=Lora:700" rel="stylesheet"/>
      </head>
      <body>
[VARIOUS DIVS AND FOR-EACH LOOPS FOR MAKING A COUPLE OF MENUS]
      </body>
  </html>

这一切都导致页面在 Internet Explorer 中加载得非常花哨(但是,我真的不关心单独的 CSS 问题),但在 Firefox 和 Chrome 中,我留下了一个空白页面,其中开发工具中可用的 XML(但没有 html,只是无样式的 XML)

我确定我错过了一些简单的东西,我现在该怎么办?

【问题讨论】:

  • 这看起来像个骗子,虽然我不能确定。你能检查this solution并告诉我它是否适用。
  • 不幸的是,这并没有改变任何东西。我对 C# 方法的这一行进行了更改:string xmlPrefix = "&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?&gt;&lt;?xml-stylesheet type=\"application/xml\" href=\"/XSLT/Index.xslt\"?&gt;";
  • XSLT 是一种服务器端技术。客户端支持过于分散,彼此之间不兼容,不可靠。要么您自己提供 XSLT 处理器(JS 有 XSLT 实现),要么您接受与您的解决方案不兼容的平台 - 或者您做唯一明智、可预测和稳定的事情并在服务器上转换您的 XML。
  • @ChrisHinton 您的 cmets 并不清楚您是否正确理解了我链接到的答案。它不涉及任何 XML 文档中的更改……而是关于当浏览器请求此文档时从服务器发送的内容类型标头。你检查过这个吗? Fiddler 对此非常有用。
  • @ChrisHinton 是的,我必须履行我的公民义务并使用 dupehammer。很高兴你找到了它的底部。

标签: c# xml xslt


【解决方案1】:

我认为问题可能是

type="text/xml"

可靠工作的形式是

type="text/xsl"

【讨论】:

  • 嘿,谢谢你的回答,但我一定错过了其他东西,因为不幸的是这并没有改变任何东西。
  • 您是从文件加载:URI 还是 http:URI?可能存在跨站点脚本规则。此外,HTTP 响应中的媒体类型可能是相关的(传统上,IE 使用 URI 中的文件扩展名,而其他浏览器使用 HTTP 媒体类型)。当它失败时,我希望在开发者控制台中看到一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多