2009-03-31 29 views
11

Tôi có một thẻ CDATA trong mã XML của tôi có chứa một số siêu liên kết.Hiển thị các thẻ HTML từ trong thẻ CDATA trong XSL

<smartText><![CDATA[ 
Among individual stocks, the top percentage gainers in the S.&P. 500 are 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=LNC'>Lincoln National Corp</a> and 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=PLD'>ProLogis</a>.]]> 
</smartText> 

tôi đang cố gắng để biến nó thành một trang HTML như sau ...

<p class="smartText"> 
    <xsl:copy-of select="marketSummaryModuleData/smartText"/>          
</p>  

Thật không may là đầu ra lên trang xuất hiện trong văn bản thuần túy, không phải là html.

Among individual stocks, the top percentage gainers in the S.&P. 500 are <a href ='http://investing.businessweek.com/research/stocks/snapshot/snapshot.asp?ric=PLD'>ProLogis</a> and <a href ='http://investing.businessweek.com/research/stocks/snapshot/snapshot.asp?ric=LNC'>Lincoln National Corp</a>. 

Phần CDATA được tạo từ trang ASP cổ điển, vì vậy đầu ra XML thực tế không chứa phần CDATA. Có thể đó là một phần của vấn đề? Tôi dường như không thể lấy thông tin để hiển thị trên trang. Tôi đã thử nhiều giải pháp do các tìm kiếm của Google cung cấp, chẳng hạn như các thẻ vô hiệu hóa thoát, xsl: copy-of, xsl: value-of và nhiều hơn nữa.

Cảm ơn bạn

+0

giải pháp cuối cùng ... Xin vui lòng xem thông báo này. http://stackoverflow.com/questions/706314/hyperlinks-within-xslt-templates –

Trả lời

6

Bạn phải sửa XML để HTML mong muốn (và nó cần phải là XML được định dạng tốt) không được chứa trong phần CDATA.

Bất kỳ phần CDATA nào chỉ là một phần của nút văn bản() và bộ xử lý XSLT xử lý nó như vậy.

Việc đánh dấu trong CDATA được thừa nhận rộng rãi là thực tiễn không tốt và vấn đề được báo cáo là một kết quả điển hình.

DOE (tắt-thoát-đầu ra) là một tính năng tùy chọn trong XSLT và không được bảo đảm để được triển khai và tạo ra kết quả như mong đợi trên các bộ xử lý XSLT khác nhau.

Để trích dẫn W3C XSLT Spec:.

"An XSLT processor is not required to support disabling output escaping. If an xsl:value-of or xsl:text specifies that output escaping should be disabled and the XSLT processor does not support this, the XSLT processor may signal an error; if it does not signal an error, it must recover by not disabling output escaping. "

và:

"Since disabling output escaping may not work with all XSLT processors and can result in XML that is not well-formed, it should be used only when there is no alternative."

+0

@Tomalak d-o-e có thể hoặc không thể giải quyết vấn đề của OP, tùy thuộc vào bộ xử lý XSLT mà anh ta đang sử dụng. –

+0

vô hiệu hóa-đầu ra-thoát không hoạt động, nhưng không phải trong tất cả các trình duyệt. Vì mô-đun này sẽ được hàng nghìn người sử dụng, nó sẽ cần phải làm việc trong tất cả các trình duyệt. Có vẻ như tôi sẽ cần lấy dữ liệu trong mã ASP của tôi và phân tích cú pháp thành nhiều thẻ thay vì một chuỗi văn bản lớn. –

+0

@Shane: bạn nên thêm chi tiết mà bạn cần để làm việc trong tất cả các trình duyệt trong câu hỏi của bạn. Biến đổi phía máy chủ có hoạt động cho bạn không? – AnthonyWJones

11
<p class="smartText"> 
    <xsl:value-of 
    select="marketSummaryModuleData/smartText" 
    disable-output-escaping="yes" 
    /> 
</p> 

EDIT: Như @Randell chỉ ra trong các ý kiến, disable-output-escaping là không có mặt trong tất cả các bộ xử lý XSLT. Ví dụ, một trong Firefox không hỗ trợ thuộc tính này. Ở trên sẽ không làm việc cho các bộ xử lý này. Tất cả độc lập bộ xử lý XSLT mà tôi biết đều hỗ trợ nó.

+0

Điều này không đảm bảo hoạt động trên tất cả các trình duyệt. – Randell

+0

@Randell: Hoàn toàn không rõ ràng từ câu hỏi rằng việc chuyển đổi XSLT đang được thực hiện trong trình duyệt. – Tomalak

+0

Bạn có thể giải thích về điều này một chút không? – Randell

0
<xsl:for-each select="marketSummaryModuleData/smartText"> 
    <xsl:copy-of select="node()"/> 
</xsl:for-each> 

<smartText> 
Among individual stocks, the top percentage gainers in the S.&P. 500 are 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=LNC'>Lincoln National Corp</a> and 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=PLD'>ProLogis</a>. 
</smartText> 
Các vấn đề liên quan