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