XML内联XSL可以在Firefox上使用,但Chrome和Edge有;没有匹配的选择器或样式“;

XML内联XSL可以在Firefox上使用,但Chrome和Edge有;没有匹配的选择器或样式“;,xml,xslt,Xml,Xslt,我第一次使用XML。为了解决常见的源代码问题,我决定使用内联XSLT(和模式),尽管这似乎不是必需的。当我将XML文件加载到Firefox中时,数据完全按照要求呈现。当我使用Chrome或Edge时,不呈现数据-当我“检查”页面时,我看到消息“没有匹配的选择器或样式” 我使用以下代码声明XSLT: <?xml-stylesheet type = "text/xml" href = "#stylesheet"?> <!DOCTYPE Ass

我第一次使用XML。为了解决常见的源代码问题,我决定使用内联XSLT(和模式),尽管这似乎不是必需的。当我将XML文件加载到Firefox中时,数据完全按照要求呈现。当我使用Chrome或Edge时,不呈现数据-当我“检查”页面时,我看到消息“没有匹配的选择器或样式”

我使用以下代码声明XSLT:

<?xml-stylesheet type = "text/xml" href = "#stylesheet"?>
<!DOCTYPE Ass8 [
<!ATTLIST xsl:stylesheet
  id    ID  #REQUIRED>
]>

我也尝试过使用“application/xml”,但结果相同

我的XSL声明如下:

<xsl:stylesheet id = "stylesheet"
                version = "1.0" 
                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
                xmlns     = "http://www.w3.org/1999/xhtml">

我必须添加最后一行(xhtml)才能在Firefox上运行

谁能给我指出正确的方向,告诉我为什么我是个白痴,等等?我将非常感激

这是我正在使用的代码的缩短版本,它可以在Firefox上工作,但不能在Chrome上工作

<?xml version = "1.0" encoding = "UTF-8" ?>
<?xml-stylesheet type = "text/xml" href = "#sheet1"?>
<!DOCTYPE dataWrapper [
<!ELEMENT xsl:stylesheet (#PCDATA)>
<!ATTLIST xsl:stylesheet 
          id    ID  #REQUIRED>
]>

<SS1:dataWrapper    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:SS1 = "SS1:groupData" >
                
<!-- Add the Schema -->
<xsd:schema targetNamespace="SS1:dataWrapper">
    <element name = "SS1:dataWrapper"   type = "dataWrapperType"/>
    <element name = "SS1:groupData" type = "groupDataType"/> 

<!-- Now the simple elements -->
    <xsd:element name = "SS1:fieldOne"      type = "xsd:string"/>
    <xsd:element name = "SS1:fieldTwo"      type = "xsd:string"/>
    <xsd:element name = "SS1:fieldThree"    type = "xsd:positiveInteger"/>
    <xsd:element name = "SS1:fieldFour" type = "xsd:positiveInteger"/>

<!-- Define the structure of the complex elements -->
    <complexType name = "dataWrapperType">
        <sequence>
            <element ref = "groupDataType"/>
        </sequence>
    </complexType> 

    <complexType name = "groupDataType">
        <sequence>
            <xsd:element ref = "SS1:fieldOne"/>
            <xsd:element ref = "SS1:fieldTwo"/>
            <xsd:element ref = "SS1:fieldThree"/>
            <xsd:element ref = "SS1:fieldFour"/>
        </sequence>
    </complexType>

</xsd:schema>

<!-- Add the XSLT -->                   
<xsl:stylesheet id = "sheet1"
                version = "1.0" 
                xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
                xmlns     = "http://www.w3.org/1999/xhtml">
        <xsl:output method = "html" doctype-system = "about:legacy-compat" 
        encoding = "UTF-8"/>

        <xsl:template match = "/">
<!--                <xsl:apply-templates/> -->
            <html>
                <head> 
                    <title>Assignment 8 Output</title> 
                </head>
                <body>
                    <table>
                        <tr style = "color:white; background:blue">
                            <th>fieldOne</th>
                            <th>fieldTwo</th>
                            <th>fieldThree</th>
                            <th>fieldFour</th>
                        </tr>
                    
            <xsl:for-each select = "SS1:dataWrapper/SS1:groupData">
            <tr style = "color:navy; background:aqua; text-align:center">
            <td>    <xsl:value-of select = "SS1:fieldOne"/>     </td>
            <td>    <xsl:value-of select = "SS1:fieldTwo"/>     </td>
            <td>    <xsl:value-of select = "SS1:fieldThree"/>   </td>
            <td>    <xsl:value-of select = "SS1:fieldFour"/>        </td>
            </tr>
            </xsl:for-each>
        </table>
        </body>
        </html>
        </xsl:template>
</xsl:stylesheet>
                
                
<SS1:groupData>
    <SS1:fieldOne>Abc</SS1:fieldOne>
    <SS1:fieldTwo>Def</SS1:fieldTwo>
    <SS1:fieldThree>100</SS1:fieldThree>
    <SS1:fieldFour>1000</SS1:fieldFour>
</SS1:groupData>
</SS1:dataWrapper>

]>
作业8输出
菲尔德一号
第二场
第三场
第四场
Abc
Def
100
1000

也许可以向我们展示一个完整但最少的示例,我刚刚尝试加载

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="#sheet1"?>
<!DOCTYPE root [
  <!ELEMENT xsl:stylesheet (#PCDATA)>
  <!ATTLIST xsl:stylesheet
    id ID #REQUIRED>
]>
<root>
    <items>
        <item>
            <name>item 1</name>
        </item>
        <item>
            <name>item 2</name>
        </item>
    </items>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" id="sheet1">
        <xsl:template match="/">
            <html>
                <head>
                    <title>Example</title>
                </head>
                <body>
                    <h1>Example</h1>
                    <xsl:apply-templates select="root/items"/>
                </body>
            </html>
        </xsl:template>
        
        <xsl:template match="items">
            <ul>
                <xsl:apply-templates/>
            </ul>
        </xsl:template>
        
        <xsl:template match="item">
            <li>
                <xsl:apply-templates/>
            </li>
        </xsl:template>
        
    </xsl:stylesheet>
</root>
然后将XSLT应用于Chrome、基于Chrome的Edge和Firefox


请记住,PI(处理指令)的“数据”部分通常看起来像XML元素标记的属性/值对,但通常不是;Chrome和Chrome-under-the-hood使用的XML解析器/XSLT处理器组件libxml/libxslt,如果您希望它们正确解析PI以找到嵌入的样式表,则不允许有过多的空格。

mment“我必须添加最后一行(xhtml)才能在Firefox上运行”,这听起来很奇怪,可能更多地表明缺少正确的结果根元素和/或xsl:output method=“html”声明。但总体而言,这类内容的兼容性并不好,而且十多年来,浏览器供应商自己都没有打算改进浏览器中的XML堆栈,因此我怀疑它会变得更好,相反,故事情节是让它变得更糟。您是否尝试将
xsl:stylesheet
元素声明为在嵌入式DTD中,这很有帮助。我编辑了我的答案,向您展示了在libxslt或Chrome中如何解决
xml样式表
解析的一些怪癖。我采纳了您关于空白的建议,删除了对“xhtml”的引用,现在它可以按照我的要求工作了。感谢您教给一位老人一些新技巧!
<?xml version = "1.0" encoding = "UTF-8" ?>
<?xml-stylesheet type="text/xml" href="#sheet1"?>
<!DOCTYPE SS1:dataWrapper [
<!ELEMENT xsl:stylesheet (#PCDATA)>
<!ATTLIST xsl:stylesheet 
          id    ID  #REQUIRED>
]>

<SS1:dataWrapper    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:SS1 = "SS1:groupData" >
    
    <!-- Add the Schema -->
    <xsd:schema targetNamespace="SS1:dataWrapper">
        <element name = "SS1:dataWrapper"   type = "dataWrapperType"/>
        <element name = "SS1:groupData" type = "groupDataType"/> 
        
        <!-- Now the simple elements -->
        <xsd:element name = "SS1:fieldOne"      type = "xsd:string"/>
        <xsd:element name = "SS1:fieldTwo"      type = "xsd:string"/>
        <xsd:element name = "SS1:fieldThree"    type = "xsd:positiveInteger"/>
        <xsd:element name = "SS1:fieldFour" type = "xsd:positiveInteger"/>
        
        <!-- Define the structure of the complex elements -->
        <complexType name = "dataWrapperType">
            <sequence>
                <element ref = "groupDataType"/>
            </sequence>
        </complexType> 
        
        <complexType name = "groupDataType">
            <sequence>
                <xsd:element ref = "SS1:fieldOne"/>
                <xsd:element ref = "SS1:fieldTwo"/>
                <xsd:element ref = "SS1:fieldThree"/>
                <xsd:element ref = "SS1:fieldFour"/>
            </sequence>
        </complexType>
        
    </xsd:schema>
    
    <!-- Add the XSLT -->                   
    <xsl:stylesheet id = "sheet1"
        version = "1.0" 
        xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="SS1">
        <xsl:output method = "html" version="5" doctype-system = "about:legacy-compat" encoding = "UTF-8"/>
        
        <xsl:template match = "/">
            <html>
                <head> 
                    <title>Assignment 8 Output</title> 
                </head>
                <body>
                    <table>
                        <tr style = "color:white; background:blue">
                            <th>fieldOne</th>
                            <th>fieldTwo</th>
                            <th>fieldThree</th>
                            <th>fieldFour</th>
                        </tr>
                        
                        <xsl:for-each select = "SS1:dataWrapper/SS1:groupData">
                            <tr style = "color:navy; background:aqua; text-align:center">
                                <td>    <xsl:value-of select = "SS1:fieldOne"/>     </td>
                                <td>    <xsl:value-of select = "SS1:fieldTwo"/>     </td>
                                <td>    <xsl:value-of select = "SS1:fieldThree"/>   </td>
                                <td>    <xsl:value-of select = "SS1:fieldFour"/>        </td>
                            </tr>
                        </xsl:for-each>
                    </table>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>
    
    
    <SS1:groupData>
        <SS1:fieldOne>Abc</SS1:fieldOne>
        <SS1:fieldTwo>Def</SS1:fieldTwo>
        <SS1:fieldThree>100</SS1:fieldThree>
        <SS1:fieldFour>1000</SS1:fieldFour>
    </SS1:groupData>
</SS1:dataWrapper>