Làm thế nào tôi có thể chèn
Trong biểu định kiểu XSLT, tôi tiếp tục gặp lỗi này:
Lỗi phân tích cú pháp XML: thực thể không xác định
Về cơ bản tôi muốn một nhân vật không phá vỡ không gian trong Mẫu XSLT.
Làm thế nào tôi có thể chèn
Trong biểu định kiểu XSLT, tôi tiếp tục gặp lỗi này:
Lỗi phân tích cú pháp XML: thực thể không xác định
Về cơ bản tôi muốn một nhân vật không phá vỡ không gian trong Mẫu XSLT.
Câu trả lời:
Sử dụng mã thực thể  
thay thế.
là một "tham chiếu thực thể ký tự" HTML. Không có thực thể được đặt tên cho không gian không phá vỡ trong XML, vì vậy bạn sử dụng mã  
.
Wikipedia bao gồm một danh sách các thực thể XML và HTML và bạn có thể thấy rằng chỉ có 5 "thực thể được xác định trước" trong XML, nhưng HTML có hơn 200. Tôi cũng sẽ chỉ đến Tạo một khoảng trắng (& nbsp;) trong XSL có câu trả lời tuyệt vời.
Š
thay vì  
cái sau sẽ luôn phân giải thành một không gian không phá vỡ Unicode.
 
hoạt động thực sự tốt. Tuy nhiên, nó sẽ hiển thị một trong những ký tự lạ đó trong mã hóa ANSI. <xsl:text>
làm việc tốt nhất cho tôi
<xsl:text> </xsl:text>
Người ta cũng có thể làm điều này:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, điều này không bắt buộc và nó không được dùng trong XSLT 2.0 và hơn thế nữa trong 3.0. Trong các phiên bản này, bạn có thể đạt được hiệu ứng tương tự với xsl:character-map
bộ xử lý chéo được đảm bảo. Ngoài ra, điều này đặt một thực thể được đặt tên
trong đầu ra, không nhất thiết giống như một không gian không phá vỡ và kết thúc nhận phải có thực thể này được khai báo (trong HTML nó thường được ngầm định).
Dùng cái này
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
chỉnh sửa: Downvoters có lẽ nên xác nhận rằng điều này hoạt động trước tiên (nó là, và là giải pháp chung nhất cho vấn đề.)
Bạn có thể muốn thêm định nghĩa cho thực thể này vào đầu tệp (bên dưới khai báo xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Ngoài ra, bạn có thể thêm nhiều thực thể như Ntilde, Aacute, v.v.
Ngoài câu trả lời của người chiến thắng hugo, có thể nhận được tất cả các tham chiếu ký tự đã biết hợp pháp trong tệp XSLT, như sau:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text>& –</xsl:text>
Cũng có sự khác biệt nhất định trong kết quả của phương pháp này so với <xsl:text disable-output-escaping="yes">
một. Loại thứ hai sẽ tạo ra chuỗi ký tự chuỗi như
cho tất cả các loại đầu ra, thậm chí cho <xsl:output method="text">
và điều này có thể khác với những gì bạn muốn ... Ngược lại, việc nhận các thực thể được xác định cho mẫu XSLT <!DOCTYPE ... <!ENTITY ...
sẽ luôn tạo ra đầu ra phù hợp với xsl:output
cài đặt của bạn .
Và khi bao gồm tất cả các tham chiếu ký tự, có thể là khôn ngoan khi sử dụng trình phân giải thực thể cục bộ để giữ cho công cụ XSLT không tìm nạp các định nghĩa thực thể ký tự từ Internet. Người dùng JAXP hoặc Xalan-J rõ ràng có thể cần một bản vá cho Xalan-J để sử dụng trình phân giải chính xác. Xem blog XSLT, thực thể, Java, Xalan ... của tôi để tải về bản vá và nhận xét.
Khi bạn sử dụng những thứ sau (không có disable-output-escaping
!) Bạn sẽ nhận được một khoảng trống không phá vỡ:
<xsl:text> </xsl:text>
disable-output-escaping
điều này
Các bảng định kiểu XSLT phải là XML được định dạng tốt. Do " "
không phải là một trong năm thực thể XML được xác định trước , nên nó không thể được bao gồm trực tiếp trong biểu định kiểu. Vì vậy, trở lại với giải pháp của bạn " "
là một sự thay thế hoàn hảo của " "
bạn nên sử dụng.
Thí dụ:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
bạn cũng có thể dùng:
<xsl:value-of select="'&nbsp'"/>
nhớ amp sau & hoặc bạn sẽ nhận được thông báo lỗi
&nbsp;
(giả sử bạn dự định có dấu chấm phẩy ở đó), nó sẽ hiển thị dưới dạng
chứ không phải là `` (nb-space).
Tôi đã cố gắng hiển thị đường viền trên một ô trống trong bảng HTML. Thủ thuật cũ của tôi về việc sử dụng không gian không phá vỡ trong các ô trống không hoạt động từ xslt. Tôi đã sử dụng ngắt dòng với hiệu ứng tương tự. Tôi đề cập đến điều này chỉ trong trường hợp lý do bạn cố gắng sử dụng không gian không phá vỡ là để cung cấp một số nội dung cho một ô bảng 'trống' để bật viền ô.
<br/>
Thử sử dụng
<xsl:text> </xsl:text>
Nhưng nó phụ thuộc vào bộ xử lý XSLT mà bạn đang sử dụng: thông số XSLT không yêu cầu bộ xử lý XSLT chuyển đổi nó thành "
".
Mặc dù câu trả lời đã được cung cấp bởi @brabster và những người khác.
Tôi nghĩ rằng giải pháp tái sử dụng nhiều hơn sẽ là:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>