xml
  • xslt
  • 2012-04-17 19 views 13 likes 
    13

    Sự khác biệt giữa hai mã được đưa ra dưới đây là gì? Cả hai mã kiểm tra xem một thuộc tính tồn tại trong một thẻ hay không:Sự khác nhau giữa các thuộc tính XSLT khi nào và nếu

    <xsl:choose> 
        <xsl:when test="string-length(DBE:Attribute[@name='s0SelectedSite']/node()) &gt; 0"> 
        <table> 
         ... 
        </table> 
        </xsl:when> 
        <xsl:otherwise> 
        <table> 
         ... 
        </table> 
        </xsl:otherwise> 
    </xsl:choose> 
    

    <xsl:if test="@Col1-AllocValue"> 
        <xsl:copy-of select="@Col1-AllocValue"/> 
    </xsl:if> 
    

    Trả lời

    2

    Các choose phép bạn kiểm tra cho nhiều điều kiện và chỉ áp dụng khi một phù hợp (hoặc một trường hợp mặc định). Với if bạn cũng có thể kiểm tra, nhưng chúng được kiểm tra độc lập và mỗi trường hợp phù hợp sẽ có đầu ra.

    Thêm nhiều chi tiết (xin lỗi đã phải vội vã tắt)

    choose phép bạn kiểm tra cho nhiều trường hợp và chỉ tạo ra trong trường hợp một trong những trận đấu điều kiện, hoặc tạo ra một số lượng mặc định. ví dụ:

    <xsl:choose> 
        <xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when> 
        <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
        <xsl:when test='@foo=3'><!-- do something when @foo is 3--></xsl:when> 
        <xsl:otherwise><!-- this is the default case, when @foo is neither 1, 2 or 3--></xsl:otherwise> 
    </xsl:choose> 
    

    Như bạn thấy một của "chi nhánh" sẽ chân tùy thuộc vào giá trị của @foo.

    Với if, đó là một thử nghiệm duy nhất và tạo ra các đầu ra trên các kết quả của bài kiểm tra đó:

    <xsl:if test='@foo=1'><!-- do this if @foo is 1--></xsl:if> 
    <xsl:if test='@foo=2'><!-- do this if @foo is 2--></xsl:if> 
    <xsl:if test='@foo=3'><!-- do this if @foo is 3--></xsl:if> 
    

    Các biến chứng ở đây là trường hợp thất bại - những gì sẽ xảy ra khi @foo không phải là 1,2 hoặc 3? Trường hợp bị thiếu này là những gì được xử lý gọn gàng bởi choose - tức là khả năng có hành động mặc định.

    XSL cũng thiếu "khác" mà bạn tìm thấy trong hầu hết các ngôn ngữ khác, cho phép bạn để cung cấp một hành động thay thế các thử nghiệm if nên thất bại - và một choose với một đơn whenotherwise cho phép bạn làm được việc này, nhưng trong ví dụ của tôi ở trên, đó sẽ là khủng khiếp (để chứng minh tại sao bạn không làm điều này ..)

    <xsl:choose> 
        <xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when> 
        <xsl:otherwise> <!-- else --> 
        <xsl:choose> 
         <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
         <xsl:otherwise> <!-- else --> 
         <xsl:choose> 
          <xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when> 
          <xsl:otherwise><!-- this is the case, when @foo is neither 1, 2 or 3--></xsl:otherwise> 
         </xsl:choose> 
         </xsl:otherwise> 
        </xsl:choose> 
        </xsl:otherwise> 
    </xsl:choose> 
    
    +0

    Cần giải thích thêm. –

    12

    Cơ cấu chọn là

    <xsl:choose> 
        <xsl:when test="a">A</xsl:when> 
        <xsl:when test="b">B</xsl:when> 
        <xsl:when test="c">C</xsl:when> 
        <xsl:when test="...">...</xsl:when> 
        <xsl:otherwise>Z</xsl:otherwise> 
    </xsl:choose> 
    

    cho phép multipl e kiểm tra và một hoạt động được thực hiện cho các thử nghiệm đầu tiên đánh giá để true. xsl:otherwise là để thực hiện các tác vụ mặc định khi không có séc nào đánh giá thành true; đặc biệt, điều này tạo điều kiện thuận lợi cho việc xây dựng nếu-thì-khác (chỉ một xsl:when thay thế cộng với khối xsl:otherwise).

    Nó luôn khiến tôi kinh ngạc rằng xsl:if không cho phép thay thế xsl:else, nhưng vì điều này có sẵn trong cấu trúc xsl:choose, tôi đoán rằng nó được đánh giá là không thêm nó. Có lẽ phiên bản XSLT tiếp theo sẽ kết hợp một xsl:else?

    Đối với phần còn lại, các thử nghiệm trong xsl:when và trong xsl:if thực hiện chính xác điều tương tự: kiểm tra điều kiện.

    Lưu ý rằng cấu trúc của xsl:if chỉ đơn giản là

    <xsl:if test="a">A</xsl:if> 
    

    Một đơn

    <xsl:when test="a">A</xsl:when> 
    

    sẽ là không hợp lệ: xsl:when phần tử là luôn một đứa trẻ của xsl:choose. Và xsl:choose chỉ có thể có trẻ em xsl:whenxsl:otherwise.

    1

    Sự khác nhau giữa hai mã dưới đây là gì? Cả hai mã kiểm tra xem một thuộc tính tồn tại trong một thẻ hay không:

    Đây không phải là sự thật:

    1. Đoạn mã đầu tiên thể hiện một nếu ... thì ... else hành động, trong khi đoạn thứ hai chỉ thể hiện một hành động nếu ....

    2. Các điều kiện được kiểm tra trong hai đoạn mã được cung cấp - trong hướng dẫn xsl:when và trong các hướng dẫn xsl:if khác nhau. Thực ra chỉ có các bài kiểm tra xsl:if (trong đoạn mã thứ hai) cho sự tồn tại của một thuộc tính.

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

    • Không có vấn đề liên quan^_^