2014-01-28 49 views
0

在我有一個XML如下(簡化爲便於回答的):XSL:設置XML屬性在根元素取決於多個變量原稿

<root> 
    <element att1="yes" att2="no" other attributes... /> 
    <element att1="yes" att2="no" other attributes... /> 
    <element att1="no" att2="yes" other attributes... /> 
    <element att1="yes" att2="no" other attributes... /> 
    <element att1="yes" att2="yes" other attributes... /> 
</root> 

我有一個XSL,將檢查是否ATT1和ATT2都是「是」,如果是,請將它們放入轉換後的XML中(使用相似的格式)。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
    <root> 
     <xsl:for-each select="/root/element"> 
     <xsl:variable name="att1" select="@att1"/> 
     <xsl:variable name="att2" select="@att2"/> 
     <xsl:if test="$att1 == 'yes'"> 
     <xsl:if test="$att2 == 'yes'"> 
     <!-- print new element with attributes --> 
     </xsl:if> 
    </xsl:if> 
    </xsl:for-each> 
    </root> 
    </xsl:template> 
</xsl:stylesheet> 

我所試圖做的是,因爲如果兩個ATT1和ATT2是「不」,那什麼事都返回不同的是:

<root> 
</root> 

在這種情況下,我想杜絕屬性根元素,像BlankXML =「Y」,具體如下:

<root BlankXML="Y"> 
</root> 

所以基本上,如果每一個元素的ATT1和ATT2是「否」,通過在根元素此BlankXML屬性。

這是我卡住的地方。在完整的編程語言中,我可能會創建一個計數器變量,並在每次到達打印新XML的部分時遞增計數器變量,最後如果計數器仍爲0,則添加BlankXML元素。但是在XSL中,我不確定如何做到這一點。據我所知,變量更像常量,不能像這樣增加。

有沒有人有任何想法?

回答

2

我認爲你是從錯誤的角度來看它。正確的觀點來自上面。嘗試像這樣:

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

<xsl:template match="/"> 
<xsl:variable name="output" select="root/element[@att1='yes' and @att2='yes']" /> 
    <root> 
     <xsl:if test="not(count($output))"> 
      <xsl:attribute name="blank">yes</xsl:attribute> 
     </xsl:if> 
     <xsl:copy-of select="$output"/> 
    </root> 
</xsl:template> 
</xsl:stylesheet> 
+0

謝謝,這很好。我仍然對XSL不熟悉,並且與「完整的」編程語言不太一樣。 – Matt