2010-03-11 32 views
13

Có chức năng mã hóa URL trong phiên bản XSLT 1 không? Tôi cần một cái gì đó tương tự như chức năng encodeURIComponent trong javascript?Phiên bản XSLT 1 Mã hóa URL

Không thể thấy điều này vì tôi đang sử dụng nền tảng .NET vì XSLT được áp dụng cho trang Sharepoint. Có cách nào để mã này mua gọi hàm mã hóa javascript trong XML, đoạn mã dưới đây:

<xsl:template name="BuildLink"> 
    <xsl:param name="PrimarySubject" /> 
    <xsl:text>?PrimarySubject=</xsl:text> 
    <xsl:value-of select="$PrimarySubject" /> 
</xsl:template> 

Cảm ơn,

Trả lời

12

bạn có thể sử dụng JScript nhúng trong XSLT ...

<msxsl:script language="JScript" implements-prefix="custom"> 
function uriencode(string) { 
return encodeURIComponent(string); 
} 
</msxsl:script> 

và gọi nó là như custom:uriencode(url_to_encode)

Trước tiên, bạn sẽ cần phải xác định không gian tên mặc dù bằng cách thêm vào <xsl:stylesheet ... tag các xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

[cập nhật]

Url tôi đặt cho các không gian tên tùy chỉnh có thể là bất cứ điều gì .. it is just a unique identifier ..
(vào liên kết kết luận rằng nó là ít gây nhầm lẫn nếu bạn không sử dụng một url như nhận diện ..)

[udpdate 2]

Một số thông tin bổ sung.
Nếu bạn sử dụng MSXML6 sau đó bạn cần phải tự cho phép kịch bản trong XSLT, bằng cách sử dụng các AllowXsltScript tài sản .. (reference)
Tùy thuộc vào cách bạn nạp XSLT và các thiết lập của nó có một cái nhìn vào các ví dụ tại Script Blocks Using msxsl:script về cách để alow script

+0

gọi như gây lỗi là điều này không đúng cách để gọi nó? – van

+0

thử gọi nó bằng '' –

+0

chuỗi đã sử dụng nhưng vẫn không có con xúc xắc ... – van

1

Có không phải là một. XSLT không có kiến ​​thức về URL và HTML.

Tùy thuộc vào ngôn ngữ và nền tảng bạn đang sử dụng, bạn có thể sử dụng XSLT extension để thực hiện điều đó.

1

Bạn có thể, trong một số trường hợp nhất định, hãy sử dụng EXSLT (tiện ích mở rộng do trình phân tích cú pháp cung cấp): Dave Pawson's XSLT FAQ trên trang này.

Tuy nhiên, XSLT là Turing hoàn chỉnh, vì vậy bạn có thể viết bộ mã hóa URL cơ bản trong chính XSLT, về mặt lý thuyết (tôi sẽ không thử).

7

Những XSLT 1.0 stylesheets thể được sử dụng để thực hiện mã hóa URL/giải mã:

  1. url-decode.xsl
  2. url-encode.xsl

Mô tả: Chỉ một số rất nhỏ ký tự ASCII có thể được an toàn được nhúng trong URI.Các ký tự bên ngoài bộ này phải được thoát bằng cách sử dụng cái gọi là "mã hóa URL" hoặc "% -cắt hình". Các ký tự là được chuyển đổi thành byte theo một số mã hóa (ASCII nếu có thể) và các mã mỗi chữ được viết dưới dạng '%' theo sau là 2 chữ số thập lục phân. Mã hóa được sử dụng làm cơ sở cho chuyển đổi này có thể là bất kỳ điều gì, nhưng có xu hướng được quyết định theo ngữ cảnh trong đó URI đang được sử dụng. Các tiêu chuẩn tương lai và tương lai sử dụng UTF-8, nhưng các ứng dụng kế thừa bao gồm nhiều được triển khai rộng rãi, phía máy chủ bộ xử lý dữ liệu biểu mẫu HTML giả định ISO-8859-1.

Ví dụ: lời chào "¡Hola, César!" có thể được nhúng vào URI nếu nó được viết như sau: % A1Hola% 2C% 20C% E9sar !. (... giả sử ISO-8859-1 làm cơ sở để mã hóa. Nếu nó là UTF-8, thì nó sẽ là là% C2% A1Hola% 2C% 20C% C3% A9sar!).

URL demo url-encode.xsl mã hóa một chuỗi tùy ý được chuyển thành tham số có tên iso-string. Nó giả định ISO-8859-1 sẽ là cơ sở cho mã hóa URL . Cần tương thích với bất kỳ bộ xử lý XSLT 1.0 nào.

Giải mã ISO-8859-1 dựa trên Chuỗi được mã hóa URL sử dụng kỹ thuật tương tự . Xem url-decode.xsl để có bản giới thiệu . Tham số url của nó là chuỗi để được giải mã.

+0

Thật không may, đây không phải là giải pháp phổ dụng vì các bản định kiểu này được giới hạn trong Latin1 và không dịch toàn bộ bảng mã Unicode. – dolmen