2010-06-07 40 views
7

Thay đổi một thuộc tính đơn với XSLT

gì là đơn giản nhất XSLT bạn có thể nghĩ ra để chuyển đổi giá trị của người đầu tiên, trong trường hợp này chỉ, /configuration/system.web/compilation/@debug thuộc tính từ true để false?

+0

Câu hỏi hay (+1). Xem câu trả lời của tôi cho một giải pháp ngắn, đơn giản và chính xác. Câu trả lời của Lucero hiện tại là khá sai - hãy xem nhận xét của tôi về câu trả lời của anh ấy. –

Trả lời

6

chuyển đổi này:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*" name="identity"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="system.web/compilation[1]/@debug"> 
    <xsl:attribute name="debug">false</xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

khi áp dụng trên tài liệu XML này:

<configuration> 
    <system.web> 
     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is a comment --> 
     </compilation> 

     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is another comment --> 
     </compilation> 
    </system.web> 
</configuration> 

tạo ra truy nã, kết quả chính xác: đổi các debug thuộc tính của compilation đứa con đầu lòng của bất kỳ phần tử system.web nào (nhưng chúng tôi biết rằng có ly một phần tử system.web trong tệp cấu hình.

<configuration> 
    <system.web> 
     <compilation debug="false" defaultLanguage="C#"> 
      <!-- this is a comment --> 
     </compilation> 
     <compilation debug="true" defaultLanguage="C#"> 
      <!-- this is another comment --> 
     </compilation> 
    </system.web> 
</configuration> 

Như chúng ta thấy, chỉ có debug atribute đầu tiên được modifird để false, theo yêu cầu.

+1

Điều này được gọi là biến đổi mẫu nhận dạng cho XSLT, và như @Dimitre Novatchev đã chỉ ra, nó cực kỳ mạnh mẽ. – lavinio

+0

Thật đáng tiếc khi phần tử 'xsl: attribute' phải đề cập đến tên của thuộc tính cần thay đổi, khi nó đã được đưa ra trong XPath là các' xsl: template' khớp với nhau. Có cách nào để nói "thiết lập thuộc tính này, bất cứ điều gì nó được gọi là"? –

+0

@TomAnderson: Người ta có thể sử dụng ký hiệu AVT: '' Đây không phải là những gì bạn muốn nhưng trong một số khía cạnh thậm chí còn tốt hơn. –

-1

<xsl:attribute name="debug">false</xsl:attribute> bên trong <compilation>? Hay tôi hiểu nhầm câu hỏi?

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