Nhằm loại bỏ bất cứ điều gì đó trông giống như "thụt đầu dòng" nó có thể là cần thiết (có nghĩa là có những trường hợp khi bạn cần) để sử dụng cả<xsl:strip-space>
và '' indent = "no" `.
Lấy ví dụ đơn giản: bạn có chuyển đổi nhận dạng. Không có bất kỳ một trong hai phương thức được chỉ định, phép biến đổi sẽ tái tạo các nút văn bản chỉ trắng-không gian từ tài liệu XML nguồn. Nghĩa là, nếu tài liệu XML nguồn được thụt vào, thì phép biến đổi cũng sẽ tạo ra kết quả thụt lề.
Bây giờ, hãy thêm vào chuyển đổi này <xsl:output indent="no" />
. Lệnh này hướng dẫn bộ xử lý XSLT không thực hiện "in ấn" của chính nó. Tuy nhiên, các nút chỉ khoảng trống từ tài liệu XML nguồn vẫn được sao chép vào đầu ra và tài liệu kết quả trông vẫn thụt vào (vì tài liệu nguồn được thụt vào).
Bây giờ, là bước cuối cùng, hãy thêm <xsl:strip-space elements="*"/>
. Bạn đã chỉ định cả hai phương pháp ngăn chặn các nút chỉ trắng-không gian trong đầu ra. Chuyện gì xảy ra?Không có nút chỉ trắng nào được xử lý bởi bộ xử lý XSLT, và nó không thụt đầu ra - bạn nhận được kết quả đầu ra dày đặc một dòng mong muốn của mình.
Cuối cùng, thực hiện hồi quy, thay đổi <xsl:output indent="no" />
thành <xsl:output indent="yes" />
. Các <xsl:strip-space elements="*"/>
vẫn còn đó, do đó, không có khoảng trắng chỉ có các nút được sao chép trong đầu ra. Nhưng bộ xử lý XSLT tuân theo chỉ thị <xsl:output indent="yes" />
và thêm các nút văn bản chỉ khoảng trắng riêng của nó.
Vì vậy, từ bốn tổ hợp có thể, chỉ rõ cả<xsl:strip-space elements="*"/>
và <xsl:output indent="no" />
đảm bảo rằng không thụt đầu dòng sẽ được gây ra hoặc từ nút khoảng trắng chỉ từ nguồn tài liệu XML hoặc từ sáng kiến xử lý XSLT.
Ngay cả trường hợp cuối cùng này, tất nhiên, không hoàn toàn đảm bảo rằng sản lượng sẽ không được thụt - nếu các lập trình viên XSLT cố ý đặt ở đó đang thụt đầu dòng như
<xsl:text>
</xsl:text>
đầu ra sẽ chứa thụt đầu dòng này.
Câu hỏi hay. +1 từ tôi. Trong câu trả lời của tôi, tôi đã cố gắng giải thích hoàn toàn tác dụng của hai chỉ thị và cách chúng tương tác. –