如何在 XML 上同时使用 CSS 和 XSLT?
Posted
技术标签:
【中文标题】如何在 XML 上同时使用 CSS 和 XSLT?【英文标题】:How to utilise both CSS and XSLT together on XML? 【发布时间】:2019-10-17 02:32:36 【问题描述】:我正在尝试将我的 CSS 样式表与我的 XML 一起使用,该 XML 还附加了一个 XSLT 样式表,这会导致它在 CSS 附加到一个大块时完全脱离其格式。
链接 CSS 样式表并在聊天中玩弄它的样式以使其格式化。
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cuisinexsl.xsl"?>
<?xml-stylesheet type="text/css" href="ofd.css"?>
<cuisines>
<cuisinetype>
<cuisine>Greek</cuisine>
<name>Food from Zeus</name>
<address>96 Almighty Road</address>
<phone>02 2321 5592</phone>
<deliveryfee>Delivery fee is $7</deliveryfee>
<URL>https://zeusfoods.com.au/</URL>
<takeaway>Yes</takeaway>
<dinein>Yes</dinein>
<openhours>9-5 Mon-Sat,Sunday Closed</openhours>
<description>Food created by us, that even the almighty would
die for.</description>
</cuisinetype>
</cuisines>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:stylesheet type="text/css" href="ofd.css">
<xsl:template match="/">
<html>
<body>
<h1>Cuisine Restaurants</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cuisinetype">
<xsl:for-each select="cuisines/cuisinetype">
<xsl:sort select="name"/>
</xsl:for-each>
<p>
<xsl:apply-templates select="cuisine"/>
<xsl:apply-templates select="name"/>
<xsl:apply-templates select="address"/>
<xsl:apply-templates select="phone"/>
<xsl:apply-templates select="deliveryfee"/>
<xsl:apply-templates select="URL"/>
<xsl:apply-templates select="takeaway"/>
<xsl:apply-templates select="dinein"/>
<xsl:apply-templates select="openhours"/>
<xsl:apply-templates select="description"/>
</p>
</xsl:template>
<xsl:template match="cuisine">
Cuisine type: <span style="">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
CSS
这里是 css,这就像覆盖 xslt,
body
background-color: lightpink;
h1
color: black;
text-shadow: 3px 2px grey;
font-size: 60px;
text-align: center;
h2
color: black;
margin-left: 20px;
text-decoration: underline;
text-transform: uppercase;
text-align: center;
font-size: 35px;
text-shadow: 2px 1px grey;
h3
color: black;
font-size: 25px
h4
color: black;
margin-left: 20px;
margin-right: 20px;
font-family: "Times New Roman", Times, serif;
text-align: center;
body
background-image: url("Graphics/background2.jpg");
#para1
text-align: center;
color: red;
.lightgrey
background-color: lightgrey;
.padding
border: 3px solid black;
padding: 1px 125px 1px 125px;
background-color: grey;
.footer
border: 3px solid black;
padding: 1px 125px 1px 125px;
background-color: grey;
div.picture
border: 2px solid #000000;
width: 600px;
height: 4oopx
div.picture:hover
border: 2px solid #000000;
div.picture img
width: 100%;
height: auto;
div.imagedescription
padding: 2px;
text-align: centre;
background-color: lightgrey;
.site-info::after
content: "Copyright Hisham Echafaki 2017 - All Rights Reserved ";
.parastyle1
font-family: Arial, Helvetica, sans-serif;
color: black;
font-size: 28px;
font-weight: bold;
.parastyle2
font-family: Arial, Helvetica, sans-serif;
color: black;
font-size: 20px;
font-weight: bold;
.box
position: relative;
.yeet_time
position: absolute;
bottom: 0;
right: 0;
p
margin-left: 150px;
margin-right: 150px;
font-family: Arial, Helvetica, sans-serif;
font-size: 20px;
color: black;
font-weight: bold;
pw
margin-left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 40px;
color: white;
font-weight: bold;
pw2
margin-left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 18px;
color: white;
font-weight: bold;
pw3
font-family: Arial;
color: black;
font-size: 20px;
font-weight: bold;
margin-left: 40px;
margin-right: 40px;
pw4
font-family: Arial;
color: black;
font-size: 20px;
font-weight: bold;
margin-left: 150px;
margin-right: 0px;
pw5
margin-left: 880px;
font-family: Arial, Helvetica, sans-serif;
font-size: 18px;
color: black;
font-weight: bold;
pw6
font-family: Arial;
color: black;
font-size: 20px;
font-weight: bold;
margin-left: 275px;
margin-right: 0px;
a:link
color: blue;
background-color: transparent;
text-decoration: none;
a:visited
color: aqua;
background-color: transparent;
text-decoration: none;
a:hover
color: navy;
background-color: transparent;
font-size: 23px;
a:active
color: fuchsia;
background-color: transparent;
text-decoration: underline;
h5
color: black;
margin-left: 40px;
text-decoration: underline;
text-transform: uppercase;
text-align: left;
font-size: 35px;
text-shadow: 2px 1px grey;
a.zoom:hover
transform: scale(1.5);
/* (150% zoom - Note: if the zoom is too large, it will go outside of the viewport) */
</style> <div class="a"></div> margin1
margin-left: 1cm;
【问题讨论】:
你的 css 文件是什么样的?您是在尝试设置 XML 文档的样式,还是从 XSLT 输出的 HTML? 包含css 在生成的 HTML 中必须是 css,但我不确定 2 【参考方案1】:在 cmets 中编写这有点太长了,但是像您所做的那样将 XML 链接到 XSLT 样式表和 CSS 样式表是没有意义的
<?xml-stylesheet type="text/xsl" href="cuisinexsl.xsl"?>
<?xml-stylesheet type="text/css" href="ofd.css"?>
但是,在您的情况下,您不是尝试使用 CSS 设置 XML 样式,而是使用 XSLT 创建的 HTML。
在这种情况下,您需要执行以下操作
-
从 XML 中删除
<?xml-stylesheet type="text/css" href="ofd.css"?>
从 XSLT 中删除流氓 <xsl:stylesheet type="text/css" href="ofd.css">
(否则您的 XSLT 将不会形成良好的格式)。
将行 <link rel="stylesheet" type="text/css" href="ofd.css" />
添加到 HTML 的 <head>
部分
例如:
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="ofd.css" />
</head>
<body>
<h1>Cuisine Restaurants</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
【讨论】:
感激不尽!非常感谢你,这个错误让我紧张了好几个小时!你修好了!以上是关于如何在 XML 上同时使用 CSS 和 XSLT?的主要内容,如果未能解决你的问题,请参考以下文章
CSS 转换不起作用 Firefox for XML 文档使用 XSLT 转换为 HTML
CSS Accordion 使用 XML/XSLT 文件中的数据