我有這種形式的一些XML文件:說服火狐解析嵌入XML(應用XSL後)HTML
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="biomirror.xsl"?>
<Thread>
<Title> Some thread title </Title>
<Posts>
<Post>
<Author> Me </Author>
<Body>
This is the post body, which <b>may</b> have embedded XHTML, including all sorts of things like:<br />
<div class="quote">Quotes</div>
I know it's XHTML, though, the program spitting out XML verifies that.
</Body>
</Post>
</Posts>
</Thread>
我需要把它們格式化成可讀的線程,所以我使用一個CSS樣式表和一個XSL樣式表。 CSS的作品,我知道有一個事實,沒有什麼不妥。我的問題似乎與XSL一樣,因爲任何嵌入式XHTML都不會被Firefox解析。在IE瀏覽器中,它完美地工作,並以適當的格式出現,但在Firefox中它完全是純文本格式。我認爲這與它在輸出前被轉義有關,但我無法弄清楚如何防止這種情況。
XSL是:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
omit-xml-declaration="yes"
method="xml"
media-type="application/xhtml+xml"
indent="no"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
/>
<xsl:template match="Posts">
<xsl:for-each select="Post">
<tr xmlns="http://www.w3.org/1999/xhtml" class="Post">
<td>
<div>
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="Author">
<xsl:value-of select="Author"/>
</td>
<td class="Date">
Post <xsl:value-of select="PostID"/>
<xsl:choose>
<xsl:when test="count(LastPost) > 0">
(lastpost)
</xsl:when>
</xsl:choose> at <xsl:value-of select="Date"/>
</td>
</tr>
</table>
</div>
<div class="Body">
<xsl:copy-of select="Body" />
</div>
<xsl:choose>
<xsl:when test="count(Sig) = 1">
<div class="Sig">
<xsl:value-of disable-output-escaping="yes" select="Sig"/>
</div>
</xsl:when>
<xsl:when test="count(Sig) = 0">
<div class="SigFooter"> </div>
</xsl:when>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template match="Thread">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<xsl:choose>
<xsl:when test="count(Title) = 1">
<title>
<xsl:value-of select="Title"/>
</title>
</xsl:when>
</xsl:choose>
<link href="resources/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table class="Thread" align="center" width="90%" height="95%" cellpadding="2em">
<tr>
<td colspan="3">
<div class="Title">
<xsl:value-of select="Title"/>
<br />
<a href="whatis.xml">
<img src="resources/banner.png" />
</a>
</div>
</td>
</tr>
<xsl:apply-templates select="Posts"/>
<tr height="100%">
<td valign="bottom">
<div class="Footer">
Footer message n stuff
</div>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
這是一個黑客位和任何奇怪的屬性,我在Visual Studio中指責的。這是我第一次使用XSL(對XML比較熟悉),所以我不知道該怎麼做才能解決這個問題。 :)
現在,我讀了這個問題: XSLT: Parsing HTML embedded in XML? 並試圖將它集成到我的XML和XSL(如上所示)。儘管如此,Firefox仍然不起作用。
編輯:另外,我嘗試了xsl:value-of和xsl:copy-of來輸出內容。值的輸出純文本和尊重我的格式(從CSS),複製輸出純文本和廢墟我的格式(退回到正文格式,無視div和表)。
編輯2:修訂XSL以反映答案的建議。格式化很好,但嵌入的標籤仍然以文本出現,而不是被解釋。
哦,還:CSS在標準渲染模式下區分大小寫。請仔細檢查您的班級名稱是否正確。 – Tomalak 2010-07-16 21:22:56
我的班級名稱是正確的,看起來像。我只是嘗試了所有的建議。它解決了複製忽略樣式的問題,但在頁面周圍引入了一個薄白色邊框,但仍未修復XHTML未被解釋爲這樣的問題。 – ssube 2010-07-16 21:42:31
@peachy:這些只是建議。你做客戶端XSLT處理? – Tomalak 2010-07-16 21:55:36