2010-05-01 43 views
6

Có thể sử dụng XSLT để chuyển đổi XML thành một thứ khác ngoài XML không?XSLT: Biến đổi thành nội dung không phải là xml?

ví dụ: tôi muốn trận chung kết phi xml nội dung:

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

Bạn thông báo đang tài liệu này không phải là xml (hoặc thậm chí html), nhưng nó có <elements>.

Có thể sử dụng XSLT để tạo đầu ra không phải là xml không?


Một ví dụ về đầu ra phi xml có thể là:

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

Bạn sẽ nhận thấy tài liệu này là HTML, bởi vì trong HTML IMGBR thẻ là cấm từ có một đóng cửa nhãn. Điều này giải thích với xhtml, việc xây dựng lại HTML bằng cách sử dụng xml, trong đó tất cả các phần tử được yêu cầu từ việc có thẻ đóng (vì trong mỗi thẻ xml phải được đóng).


Một ví dụ về đầu ra phi xml có thể là:

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

tôi có thể tạo nên bất kỳ nguồn xml tôi thích, nhưng một ví dụ có thể là:

Nguồn xml:

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

Hoặc có thể:

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

Có gì sai với '' và '
'? – kennytm

+0

@KennyTM: HTML cấm đóng thẻ trên IMG và BR. Nó không phải là các thẻ đóng là xúc phạm. Nó chỉ là HTML thích hợp sẽ không có chúng. –

Trả lời

1

Có, bạn có thể, bằng cách sử dụng phần tử xsl:output trong biểu định kiểu của mình.

8

Bạn có thể sử dụng <xsl:output> để chỉ định định dạng đầu ra, không phải là xml, xem this reference page.

Tuy nhiên, nếu bạn đang outputting html, không có trình duyệt hiện đại nên phàn nàn ngay cả khi bạn đặt các thẻ đóng cửa, vì vậy sử dụng ví dụ của bạn ở trên, tôi tin rằng tất cả trình duyệt nên ok với: -

<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> 

Vì vậy, không quá chắc chắn lý do tại sao bạn không muốn đặt thẻ đóng, trừ khi tôi đang thiếu thứ gì đó.


Cập nhật: Added ví dụ về đầu ra xml không

Với kiểu này: -

<?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> 

và xml đầu vào này: -

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

Bạn nhận được kết quả như này: -

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

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

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

@Alan Chan: Nó không tạo nhiều HTML không hợp lệ mà các trình duyệt có thể xử lý; nó tạo ra HTML hợp lệ để các trình phân tích cú pháp có thể xử lý nó. –

+0

@Ian: ok tôi hiểu rồi. Vâng, nếu bạn sử dụng để chỉ định đầu ra là html và sau đó sử dụng để tạo thẻ html ... ví dụ: file1.png thì trình xử lý xslt sẽ tạo ra các thẻ ,
, v.v. mà không có thẻ đóng như được yêu cầu cho html. –

4

Không có vấn đề làm thế nào bạn tạo thẻ IMG của bạn,

<?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> 

Sản lượng phương pháp "html" sẽ gây ra các thẻ IMG để không bị đóng cửa.

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

Khi tôi tái tạo điều này, các thẻ đóng được bao gồm. Đồng thời, đôi khi tôi có thể muốn bao gồm các thẻ đóng tùy chọn và đôi khi tôi có thể không muốn. XSLT cần có khả năng chuyển đổi xml thành định dạng đầu ra ** mong muốn ** của tôi. –

Các vấn đề liên quan