2013-12-16 39 views
0

我有XML條件得到價值在XML和XSLT

<out> 
    <settings> 
    <setting name="address1" addr="test1"/> 
    <setting name="address2" addr="test2"/> 
    <setting name="address3" addr="test3"/> 
    <setting name="address4" addr="test4"/> 
    </settings> 
</out> 

我想要得到的值,如果條件名稱屬性與對應值 匹配,例如:獲取TEST3如果條件是NAME =「地址3」

類似下面這給我造成test1的,這是錯誤的

<xsl:if test="/out/settings/setting/@name='address3'"> 
     <xsl:value-of select="/out/settings/setting/@addr"/> 
</xsl:if> 

回答

2
<xsl:if test="/out/settings/setting/@name='address3'"> 

是真的如果任何setting元素名稱address3

<xsl:value-of select="/out/settings/setting/@addr"/> 

將輸出@addr屬性的第一setting按文檔順序的值(XSLT 1.0)或所有的級聯(XSLT 2.0)。如果你想在value-of明確了「地址3」的設置,然後就去做

<xsl:value-of select="/out/settings/setting[@name='address3']/@addr"/> 

沒有必要爲if檢查,因爲如果沒有「地址3」 settingselect會給你一個空節點集或序列, value-of空集是空字符串。

0

你可以做,沒有條件由路徑表達式中使用謂詞:

<xsl:value-of select="/out/settings/setting[@name='address3']/@addr"/> 

或者,如果你願意的條件表達式,你可以使用這個:

<xsl:template match="/out/settings/setting"> 
    <xsl:if test="@name='address3'"> 
    <xsl:value-of select="@addr"/> 
    </xsl:if> 
</xsl:template>