2014-03-05 60 views
0

我正在嘗試使用XSLT轉換XML。但是整個節點FKN-VERS都是空的。可以任何一個建議,請.. 我的XML代碼是:xsl文件中的空節點

<?xml version="1.0" encoding="UTF-8"?> 
<Versions> 
    <FirstVersion > 
    <Element OriginalName="fin_Test" > 
     <ElementClass Name="TEST"/> 
     <ElementAttributes/> 
    </Element> 
    <Type Name="TEST" /> 
    <LifecycleState Name="OPe" Lifecycle="STANDARD" /> 
    <Predecessors> 
     <Predecessor Variant="BASE_RETEST1" Revision="1"/> 
    </Predecessors> 

    </FirstVersion> 
</Versions> 

我對轉型的XSL代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/Versions[FirstVersion/Type/@Name='TEST']"> 
    <DATA> 
     <xsl:attribute name="ID">10</xsl:attribute> 
     <FKN-VERS> 
     <FKN-VERS> 
      <xsl:for-each select=" Versions/FirstVersion/Predecessors"> 
      <VERS-LABEL> 
       <xsl:value-of select="concat(@Variant, ';',@Revision)"/> 
      </VERS-LABEL> 
      </xsl:for-each> 
     </FKN-VERS> 
     </FKN-VERS> 
    </DATA> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<ID="10"> 
    <FKN-VERS> 
    <FKN-VERS/> 
    </FKN-VERS> 
</DATA> 

回答

1

更改for-each聲明,

<xsl:for-each select=" Versions/FirstVersion/Predecessors"> 

<xsl:for-each select="FirstVersion/Predecessors/Predecessor"> 

因爲當前節點將已經在Versions元素在含模板匹配因爲你想遍歷Predecessor元素,而不是含Predecessors元素。

+0

謝謝:)但變與願景仍然是空的:( – eriv

+0

你現在用的'的'(早期版本的呢?回答必須進行編輯,以反映您對問題中的代碼所做的更改。) – kjhughes

1

它在我看來像你的選擇路徑啓動一個節點太高,並結束一個節點太高了。試試這個:

<xsl:for-each select="FirstVersion/Predecessors/Predecessor"> 
    <VERS-LABEL> 
     <xsl:value-of select="concat(@Variant, ';',@Revision)"/> 
    </VERS-LABEL> 
</xsl:for-each> 
+0

是的,非常感謝! – eriv