2017-09-11 140 views
0

的/參數鑑於一段XML:讀取XML模塊名XML節點

<?xml version="1.0" encoding="UTF-8"?> 
<History ModuleName="Table structure tree"> 
<Release Date="12122001" Version="3.1" Title="Carrier A" Author=""> 
    <Item Type="">Test A</Item> 
</Release> 
<Release Date="13122001" Version="3.2" Title="Carrier B" Author=""> 
    <Item Type="">Test B</Item> 
</Release> 
<Release Date="14122001" Version="3.3" Title="Carrier C" Author=""> 
    <Item Type="">Test C</Item> 
</Release> 
</History> 

我如何可以讀取模塊名出節點「歷史」? 我在這裏有不同類型的值,我希望我的XSL顯示一個標題或另一個標題,具體取決於模塊名稱的值。

例如如果ModuleName以「Table structrue」開頭,那麼XSL中的標題應該是「Fields」。如果ModuleName是別的,標題應該是「Releases」。

這怎麼辦?

我真正的新XML/XSL,所以我當前的代碼(這並不在所有的工作,那爲什麼我在這裏問)看起來是這樣的:

<xsl:variable name="historyvalue" select="History"/> 
    <xsl:choose> 
     <xsl:when test="not(starts-with($historyvalue, 'Table structure'))"> 
     <h3>Releases</h3> 
    </xsl:when> 
    <xsl:otherwise> 
     <h3>Fields</h3> 
    </xsl:otherwise> 
    </xsl:choose> 

回答

1

你想要的值在舉行在History元件ModuleName屬性,因此語法如下:

<xsl:variable name="historyvalue" select="History/@ModuleName"/> 

注意,這假定您在匹配/(文檔節點,這是History元素的父)的模板。

我也會考慮顛倒xsl:choose中的邏輯來擺脫not

,弄死你與嘗試這個XSLT

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

    <xsl:template match="/"> 
    <xsl:variable name="historyvalue" select="History/@ModuleName"/> 
    <xsl:choose> 
     <xsl:when test="starts-with($historyvalue, 'Table structure')"> 
     <h3>Fields</h3> 
     </xsl:when> 
     <xsl:otherwise> 
     <h3>Releases</h3> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
    <xsl:apply-templates /> 
</xsl:stylesheet> 

你並不真的需要一個變量在這種情況下,只是改變xsl:when這個....

<xsl:when test="starts-with(History/@ModuleName, 'Table structure')"> 

另外,可以考慮用模板的方法,在模板匹配的邏輯,而不是xsl:choose

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

    <xsl:template match="History[starts-with(History/@ModuleName, 'Table structure')]"> 
    <h3>Fields</h3> 
    <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="History"> 
    <h3>Releases</h3> 
    <xsl:apply-templates /> 
    </xsl:template> 
</xsl:stylesheet> 

在此示例中,具有附加條件(History[starts-with(History/@ModuleName, 'Table structure')])的模板匹配歷史記錄對與History匹配的模板具有更高的優先級。

+0

謝謝蒂姆,你的解決方案很好的解釋和幫助!感謝您花時間! – SchweizerSchoggi