2010-10-19 27 views
5

Tôi có XSLT sauXSLT tại sao là hiển thị trong my href?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="html" omit-xml-declaration="yes" /> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 

      <html> 
      <body> 
      <xsl:for-each select="AdvReqIMailMsg"> 

       <a><xsl:attribute name="href"> 
        http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 
       Login to View History of This Request 
       </a> 
       <br/> 
      </xsl:for-each> 
      </body> 
      </html> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Kết quả có sau đây:

<a href="&#xA;     http://dotnet.dynacal.com/customerlogin.asp?P=DEMO8"> 
       Login to View History of This Request 
       </a> 

Tại sao các &#xA; và tất cả các không gian đó? Tôi mới sử dụng XSLT và các tìm kiếm trên google của tôi chưa biến bất kỳ thứ gì tôi hiểu. Cảm ơn, Shawn

+0

Câu hỏi hay, +1. Xem câu trả lời của tôi cho giải pháp ngắn nhất và dễ đọc nhất. :) –

+0

Cùng một nguyên nhân (nhưng không thực sự trùng lặp): http://stackoverflow.com/questions/848841/c-xslt-transform-adding-xa-and-xd-to-the-output – Lucero

Trả lời

5

&#A; là ký tự dòng mới được mã hóa.

Nó và các khoảng trống được giữ nguyên từ dòng mới và dấu cách trong XSLT của bạn.

1

Tôi không thực sự quen thuộc với XSLT bản thân mình một trong hai, nhưng như một đoán từ kinh nghiệm lập trình nói chung, hãy thử thay đổi

<xsl:attribute name="href"> 
        http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 

để

<xsl:attribute name="href">http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 
1

Số lượng khoảng trống trong trận đầu ra chính xác số lượng dấu cách trước http... trong bạn xslt. Xóa những người đó và dòng mới, và bạn sẽ ổn thôi.

2

Khoảng trắng được giữ nguyên khi bạn trộn các nút văn bản và phần tử. Vì vậy, một giải pháp là để tránh những khoảng trắng để bắt đầu với (như thể hiện bởi Bart), hoặc để làm những điều sau đây, có thể dễ đọc hơn kể từ khi nó được định dạng tốt:

<xsl:attribute name="href"> 
    <xsl:text>http://</xsl:text> 
    <xsl:value-of select="BackSideUrl"/> 
    <xsl:text>/customerlogin.asp?P=</xsl:text> 
    <xsl:value-of select="DynaCalPath"/> 
</xsl:attribute > 
+0

"Khoảng trắng được giữ nguyên khi bạn trộn các nút văn bản và phần tử. " Tôi nghĩ rằng tôi biết những gì bạn có ý nghĩa nhưng tôi không nghĩ rằng tuyên bố này là đúng như bằng văn bản. Thay vào đó, khoảng trắng được giữ nguyên khi (trong số các lần khác) nó nằm trong cùng một nút văn bản với văn bản không có khoảng trắng, tức là khoảng trắng và khoảng trống không cùng nhau mà không can thiệp thẻ bắt đầu hoặc kết thúc. Và sau này thường xảy ra khi bạn kết hợp văn bản và các yếu tố như anh chị em, nhưng không nhất thiết, và không chỉ sau đó. – LarsH

+0

@ LarsH, bạn đã đúng, đó là một sự đơn giản hóa rộng rãi.Vấn đề là định dạng của Visual Studio dường như bỏ qua điều này trong trường hợp được mô tả và vui vẻ chèn ngắt dòng nơi chúng thực sự có ý nghĩa. Do đó, nếu bạn làm theo quy tắc mà bạn không trộn văn bản và phần tử dưới dạng nội dung (nghĩa là, làm cho tất cả các phần tử chỉ chứa văn bản hoặc phần tử có khoảng trắng tùy chọn, nhưng không phải cả hai), trình định dạng sẽ không làm hỏng tài liệu của bạn. Đó là lý do tại sao tôi đã viết đơn giản hóa này - nó sẽ giúp tránh việc nhận các tài liệu bị hỏng. – Lucero

6

Chỉ cần sử dụng:

<a href="http://{BackSideUrl}/customerlogin.asp?P={DynaCalPath}"> 
      Login to View History of This Request 
</a> 

Điều này (sử dụng AVT - Thuộc tính-Giá trị-Mẫu) ngắn hơn và dễ đọc hơn.

Lý do cho hành vi được báo cáo, như được giải thích trong hầu hết các câu trả lời, là giá trị của thuộc tính href được xây dựng (một phần) từ nút văn bản chứa ký tự NL.

vấn đề như vậy là kết quả từ một hoàn toàn con người, tâm lý hiện tượng: chúng ta thấy rõ NL bất cứ khi nào nó được bao quanh bởi không trắng không gian, tuy nhiên chúng tôi đang NL mù mỗi khi NL là lúc bắt đầu hoặc tại kết thúc một khối văn bản. Nó sẽ là một tính năng hữu ích của bất kỳ IDE XSLT/XML nào để hiển thị trên các nhóm yêu cầu của các ký tự "vô hình" đặc biệt, chẳng hạn như NL và CR.

+0

Bạn nói đúng, đó có lẽ là giải pháp đẹp nhất ở đây. Nhưng bạn đã không giải thích * tại sao * điều này xảy ra, và điều này rõ ràng là một phần của câu hỏi! ;-) – Lucero

+0

@Lucero: Tất cả những người khác giải thích lý do tại sao điều này xảy ra - tôi thấy không cần lặp lại lời giải thích của họ. :) –

+0

@Lucero: Đã thêm một giải thích ngắn cho câu trả lời. –

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