2012-02-28 16 views
11

Trong XML của tôi, tôi đã điều sau đây:Bắt node cha thuộc tính trong XSL

<a> 
    <b> 
    <c something="false"> 
     <d> 
     <e> 
      <f>someResult</f> 
     </e> 
     </d> 
    </c> 
    </b> 
</a> 

Bây giờ trong XSL trong một vòng lặp tôi có thể làm như sau:

<xsl:value-of select="f"></xsl:value-of> 

Nhưng làm thế nào tôi có thể nhận được thuộc tính trong c?

Tôi đã thử làm như sau

<xsl:value-of select="////@something"></xsl:value-of> 

Cũng như cố gắng mẹ và không có gì có vẻ như được làm việc. Bạn có thể nhận được các nút cha như thế này không?

Ngoài ra, tôi có thể không chỉ làm:

<xsl:value-of select="https://stackoverflow.com/a/b/c/@something"></xsl:value-of> 

Như có thể là bội số của c.

Trả lời

29

Để di chuyển lên cây bạn sử dụng ".." cho mỗi cấp độ tức là trong trường hợp này có lẽ

select="../../../@something" 

Bạn cũng có thể chọn một nút tổ tiên theo tên (xấp xỉ)

select="ancestor::c[1]/@something" 

Xem http://www.stackoverflow.com/questions/3672992 để biết thêm ví dụ

8

Sử dụng:

ancestor::c[1]/@something 

Tùy chọn này chọn thuộc tính có tên something thuộc tính đầu tiên (từ nút hiện tại trở lên) tổ tiên có tên c.