2009-11-06 62 views
2

那麼我想呈現一種自行閉合標籤說<img>標籤這樣<img src="xyz.jpg" />如何使用XSLT中的屬性呈現自閉合HTML標記?

但我不知道該怎麼做......我的意思是如何呈現自封閉標籤。 什麼我有這麼遠低於爲: -

這裏是XML:

<c:Image src="xyz.jpg"></c:Image> 

這裏是XSLT:

<xsl:output indent="yes" omit-xml-declaration="yes" method="html" /> 
. 
. 
. 
    <xsl:for-each select="c:Image"> 
    <img> 
     <xsl:attribute name="src"> 
     <xsl:if test="string-length(@src)>0"> 
      <xsl:text></xsl:text> 
      <xsl:value-of select="@src"/> 
     </xsl:if> 
     </xsl:attribute> 
    </img> 
    </xsl:for-each> 
. 
. 
. 

任何幫助表示讚賞。

回答

1

有這個骯髒的道:「嘴硬」的處理器,併產生一個字符串

<xsl:for-each select="c:Image"> 
    <xsl:text disable-output-escaping="yes">&lt;img src="</xsl:text> 
    <xsl:value-of select="@src" /> 
    <xsl:text disable-output-escaping="yes">" /&gt;</xsl:text> 
</xsl:for-each> 

OK,我同意這是一個可怕的把戲,但它適用於所有proc。

+0

不,它不適用於所有處理器。對於XSLT處理器,禁用輸出轉義的實現是可選的。 – Alohci 2009-11-06 09:39:11

+0

你是對的,但我還沒有遇到不支持此功能的「主流」處理器。你知道嗎? – Erlock 2009-11-06 09:53:37

+0

我曾經使用過一個,但我不記得現在是什麼。我不知道目前的使用情況。我沒有測試過這個,但是我想知道如果在瀏覽器中應用XSLT,它是否會工作,因爲工作中輸出必須被序列化和重新解析,而不是輸出樹直接成爲DOM。你知道它是否適用於所有知名的瀏覽器? – Alohci 2009-11-06 10:11:22

1
<xsl:output method="html" version="4.0" /> 

可以做你想做的。你甚至可以包含doctype-systemdoctype-public屬性來輸出某個HTML DOCTYPE。請參閱documentation of <xsl:output>

如果你不想輸出HTML,但是XML,你有點茫然,恐怕。
<img></img><img />在語義上是等價的,並且XSLT處理器可以選擇其他變體。你不應該在乎太多。

+0

對不起......不提問題的重要因素之一。我現在已經把它列入了這個問題。任何想法現在? – Manish 2009-11-06 07:23:29

+0

在這種情況下 - 我會說它也是XSLT處理器。當使用msxsl.exe進行測試時,''標籤會以隱式關閉的方式輸出 - 不會生成'/>',並且不會生成''。 – Tomalak 2009-11-06 07:35:49

+0

順便說一句''omit-xml-declaration'與'method =「html」'是多餘的。 – Tomalak 2009-11-06 07:36:44

0
<xsl:output method="html" /> 

嘗試,如果這有助於

+0

它已經在我的代碼中了。在這裏沒有提到。我編輯了我的問題......現在有任何想法...... – Manish 2009-11-06 07:26:02

1

XSLT不適用於生成多邊形文檔。

<xsl:output method="html" /> 

總是會產生

<img src="xyz.jpg"> 

沒有結束斜槓。

<xsl:output method="xml" /> 

可以產生根據在所述處理器上

<img src="xyz.jpg" /> 

<img src="xyz.jpg"></img> 

實際上,瀏覽器會對這些做正確的事情,但將xslt生成的xhtml發送給帶有text/html內容類型的瀏覽器可能會導致出現問題,如非空元素的標籤,如< title/>, < script/>,< a/>等,可以很容易地產生哪些瀏覽器會誤解導致嚴重的渲染問題。

您必須決定是否要生成html或xhtml,並使用適當的內容類型(application/xhtml + xml for xhtml - 不支持在IE中)發送,或者後處理xslt輸出以確保自閉標籤僅用於規範空元素。

2

如果您有XSLT 2.0處理器,則可以爲輸出方法指定XHTML,該方法應該正確地序列化元素。

<xsl:output method="xhtml" /> 

http://www.w3.org/TR/xslt-xquery-serialization/#xhtml-output

給定一個XHTML元素,其含量 模型是空的,串行MUST 使用最小化標籤的語法,爲 例如<br />,如由所允許的替代 語法<br></br> XML在許多現有的用戶代理中給出了 不確定的結果。串行器MUST 在尾隨之前包括空格 />,例如, <br /><hr /><img> src="karen.jpg" alt="Karen" />