2009-12-15 22 views
8

Vì lý do lịch sử chúng ta có một hỗn hợp củaxml, html hoặc xhtml trong <xsl:output>: Lựa chọn nào tốt hơn?

<xsl:output method="xml"> 

<xsl:output method="html"> 

<xsl:output method="xhtml"> 

bên trong một bao gồm-hệ thống phân cấp các tập tin XSL. Bây giờ chúng tôi muốn cấu trúc lại để tất cả các tệp XSL sử dụng cùng một phương thức đầu ra.

Cuối cùng, chúng tôi muốn sản xuất XHTML-đầu ra vì vậy tôi cho rằng sau này sẽ là lựa chọn tốt nhất.

Nhưng sự khác biệt giữa ba phương thức đầu ra đó và bạn sẽ sử dụng loại giải pháp nào?

Edit: Tôi đang sử dụng XSLT 2.0

Trả lời

4

Tôi đã tìm thấy câu trả lời bằng cách đọc đặc tả XSLT 2.0 (XSLT 2.0 and XQuery 1.0 Serialization).

Với một thể hiện của một phần tử rỗng XHTML có mô hình nội dung không EMPTY (ví dụ, một tiêu đề trống hoặc đoạn) serializer PHẢI KHÔNG sử dụng hình thức giảm thiểu. Tức là, nó PHẢI đầu ra <p></p> và không phải <p />.

Với một yếu tố XHTML có nội dung mô hình là EMPTY, serializer PHẢI sử dụng cú pháp thẻ giảm thiểu, cho dụ <br />, như là thay thế cú pháp <br></br> phép bởi XML cho kết quả không chắc chắn trong nhiều đại lý người dùng hiện có.Bộ nối tiếp PHẢI bao gồm khoảng trống trước dấu />, ví dụ: <br />, <hr /><img src="karen.jpg" alt="Karen" />.

Các serializer PHẢI KHÔNG sử dụng các thực thể tham khảo &apos; đó, mặc dù quy phạm pháp luật trong XML và do đó trong XHTML, không được định nghĩa trong HTML và không phải là công nhận bởi tất cả các đại lý người dùng HTML.

Bộ nối tiếp NÊN không gian tên đầu ra khai báo theo cách phù hợp với yêu cầu của DTD XHTML nếu có thể. Các yêu cầu XHTML 1.0 DTD yêu cầu khai báo xmlns = "http://www.w3.org/1999/xhtml" để xuất hiện trên phần tử html và chỉ chỉ trên phần tử html. Tờ khai serializer PHẢI namespace đầu ra sao cho phù hợp với các nút namespace hiện diện trong cây kết quả, nhưng nó PHẢI tránh xuất ra namespace thừa tờ khai trên các yếu tố nơi DTD sẽ làm cho họ không hợp lệ.

Điều đó có nghĩa là câu trả lời đang sử dụng <xsl:output method="xhtml">.

+0

Nếu bạn đang sử dụng XSLT 2.0. –

3

Theo như tôi biết, không có method:xhtml đến xsl:output chỉ trong XSLT 1.0.

wc3schools đồng ý với điều này.

Vì XHTML là một phương ngữ XML, đó là những gì tôi sẽ sử dụng.

Nếu, tuy nhiên bạn đang sử dụng xslt 2.0, cũng có thể sử dụng xhtml, vì đó là những gì bạn xuất ra.

+0

Trong XSL 2.0 có. –

+0

Vì vậy, nó là. Đã sửa! – Oded

8

HTML sẽ tuần tự hóa dưới dạng HTML, vì vậy đầu ra có thể không phải là XML được định dạng đúng. Nếu bạn chỉ gửi đến các trình duyệt và không quan tâm đến việc có thể phân tích cú pháp dưới dạng XML thì điều đó có thể phù hợp với bạn.

XML sẽ tuần tự hóa dưới dạng XML, vì vậy đầu ra sẽ được tạo đúng, nhưng bạn có thể gặp phải một số vấn đề với trình duyệt bằng cách sử dụng đầu ra. Những thứ nhỏ, như tự đóng cửa <script /><div /> yếu tố. Để tránh vấn đề đó, bạn sẽ phải chơi trò chơi, chẳng hạn như thêm nhận xét bên trong phần tử (ví dụ: <script src="someJSFile.js"><!--don't close my script tag --></script>)

Nếu bạn có động cơ XSLT 2.0 và muốn có đầu ra HTML tốt mà không phải lo lắng về cách một số yếu tố được tuần tự hóa, sau đó sử dụng XHTML.

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