2010-05-01 44 views
6

是否可以使用XSLT將XML轉換爲XML以外的東西?XSLT:轉換爲非xml內容?

例如我想最終非XML內容:

<Content> 
    <image url="file1.png"> 
    <image url="file2.png"> 
    ... 
    <image url="filen.png"> 
<EndContent> 

你通知這份文件不是XML(甚至HTML),但它確實有<elements>

是否有可能使用XSLT生成非xml輸出?


非XML輸出的另一個例子是:

<HTML> 
<BODY> 
    <IMG src="file1.png"><BR> 
    <IMG src="file2.png"><BR> 
    ... 
    <IMG src="filen.png"><BR> 
</BODY> 
</HTML> 

你會發現這個文件是HTML,因爲在HTML IMGBR標籤禁止從具有封閉標籤。這與xhtml相反,使用xml重新構造HTML,其中所有元素都必須具有結束標記(因爲xml中的每個標記都必須關閉)。


非XML輸出的另一個示例可能是:

INSERT INTO Documents (Filename) VALUES ('file1.png') 
INSERT INTO Documents (Filename) VALUES ('file2.png') 
... 
INSERT INTO Documents (Filename) VALUES ('file3.png') 

我可以彌補任何源XML我喜歡,但一個實例可能是:

源XML:

<DocumentStore> 
    <Document type="image">file1.png</Document> 
    <Document type="image">file2.png</Document> 
    <Document type="image">filen.png</Document> 
</DocumentStore>  

或者也許:

<Profiles> 
    <User avatar="file1.png" /> 
    <User avatar="file2.png" /> 
    <User avatar="filen.png" /> 
</Profiles> 
+0

''和'
'有什麼問題? – kennytm 2010-05-01 11:57:10

+0

@KennyTM:HTML禁止在IMG和BR上關閉標籤。這並不是說封閉標籤是令人反感的。這只是適當的HTML不會有他們。 – 2010-05-01 23:46:43

回答

8

您可以使用<xsl:output>指定輸出格式,該格式不必是xml,請參閱this reference page

但是,如果你是輸出HTML,沒有現代的瀏覽器應該抱怨,即使你把結束標記,因此使用你上面的例子,我相信所有的瀏覽器應該是確定有: -

<HTML> 
<BODY> 
    <IMG src="file1.png"></IMG><BR></BR> 
    <IMG src="file2.png"></IMG><BR></BR> 
    ... 
    <IMG src="filen.png"></IMG><BR></BR> 
</BODY> 
</HTML> 

所以不太清楚爲什麼你不想把結束標籤,除非我失去了一些東西。


更新:非XML輸出

鑑於這種樣式的新增例如: -

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/filenames"> 

    <xsl:for-each select="filename"> 
    INSERT INTO Documents (Filename) VALUES ('<xsl:value-of select="." />') 
    </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

與此輸入XML: -

<?xml version="1.0" encoding="UTF-8"?> 
<filenames> 
    <filename>file1.png</filename> 
    <filename>file2.png</filename> 
    <filename>file3.png</filename> 
</filenames> 

你得到的輸出象這個: -

INSERT INTO Documents (Filename) VALUES ('file1.png') 

INSERT INTO Documents (Filename) VALUES ('file2.png') 

INSERT INTO Documents (Filename) VALUES ('file3.png') 
+0

@Alan Chan:與其說瀏覽器無法處理HTML生成無效HTML,它會生成有效的HTML,以便解析器可以處理它。 – 2010-05-01 23:54:37

+0

@伊恩:好吧,我明白了。那麼,如果您使用指定輸出爲html,然後使用創建html標記...例如 file1.png則xslt處理器應生成,
等標記沒有html所需的結束標記。 – 2010-05-02 16:13:39

4

不管你如何建立你的IMG標籤,

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
<HTML> 
<BODY> 
    <xsl:element name="IMG"> 
    <xsl:attribute name="src">file1.png</xsl:attribute> 
    </xsl:element> 
    <IMG src="file2.png"></IMG> 
    <IMG src="filen.png"/> 
</BODY> 
</HTML> 
</xsl:template> 
</xsl:stylesheet> 

輸出方法「HTML」將導致IMG標籤不被關閉。

<HTML> 
<BODY><IMG src="file1.png"><IMG src="file2.png"><IMG src="filen.png"></BODY> 
</HTML> 
+0

當我重現這一點時,包含結束標籤。同時,我有時可能希望包含可選的結束標籤,有時我可能不想。 XSLT需要能夠將xml轉換爲我所需的**輸出格式。 – 2010-06-30 01:30:24