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
?
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
?
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.
Đ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
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à"? –
@TomAnderson: Người ta có thể sử dụng ký hiệu AVT: '
<xsl:attribute name="debug">false</xsl:attribute>
bên trong <compilation>
? Hay tôi hiểu nhầm câu hỏi?
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. –