2011-11-04 56 views
3

我想將「@sorregion name [。='default']」下的RequestQueue elemt的值更改爲「DEFAULT.REQUEST。我嘗試使用下面的標識模板。任何人都可以請幫我這個dentity模板我想用身份模板,只有 我的XSL文件XSL - 標識轉換 - 更改元素的值

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@name[.='default']/QueueDetails/RequestQueue"> 
     <xsl:value-of select="'DEFAULT.REQUEST'"/> 
    </xsl:template> 
</xsl:stylesheet> 

我輸入XML

回答

3

我如何處理這個問題的方式與@Kirill Polishchuk所做的相同(+1 btw),那就是隻爲需要更改的節點重寫身份轉換。

但是,在您的問題中,您聲明「我只想使用身份模板,」。如果這是真正的情況,你只需要一個模板,你可以做這樣的:

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

    <xsl:template match="node()|@*"> 
    <xsl:choose> 
     <xsl:when test="current()[name()='RequestQueue'][ancestor::SORRegion[@name = 'default']]"> 
     <xsl:copy> 
      <xsl:text>DEFAULT.REQUEST</xsl:text> 
     </xsl:copy> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy>   
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

我會很好奇地想知道,雖然你爲什麼會想使用的身份只有變換模板。如果你最終需要修改的不僅僅是RequestQueue,它會變得很難看。

+0

感謝您的所有答案。我如何才能單獨更改屬性值「默認」?休息一切應該保持不變。 SORRegion name =「default」應改爲SORRegion name =「New」 – Suresh

+0

@ user1004770 - 看起來像Dimitre回答了您在此處更改「name」屬性值的問題:http://stackoverflow.com/questions/8036882/change-一個特定的屬性值 –

+0

是的。非常感謝 – Suresh

2

使用此模板:。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="SORRegion[@name = 'default']/QueueDetails/RequestQueue"> 
     <xsl:copy> 
     <xsl:text>DEFAULT.REQUEST</xsl:text> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet>