2012-10-29 55 views
0

我有一個xml文件,它具有多個具有類似子元素的相似元素。例如。有多種選擇,但需要單個xsl:當滿足某個條件時的值

<root> 
    <elem> 
     <condition>A</condition> 
     <value>111</value> 
    </elem> 
    <elem> 
     <condition>B</condition> 
     <value>555</value> 
    </elem> 
    <elem> 
     <condition>A</condition> 
     <value>222</value> 
    </elem> 
</root> 

這些元件之一包含一個值我需要XSL提取。該值必須通過元素子節點中另一個元素中聲明的條件來標識。 可以說條件是'B',我需要那個元素'555'的值。

我知道如何在XML編輯器的XPath我用得到正確的值(Rinzo - Eclipse的)=>

/root/elem[condition='B']/value 

但我過不了(任意)值時,我設法得到它的XSL =>

<xsl:value-of select="/root/elem[condition='B']/value"/> 

xsl中的值將位於單個元素中,因此不能使用for-each循環。 Imho原始的xml格式很差,但我無法幫助。

所以問題是,我該如何在xsl文件中使用xsl:value-of?

+2

您的XML文檔中是否有任何命名空間? – Flynn1179

+0

有關命名空間的好處。我沒有意識到整個XML文件沒有被顯示。所以我們看不到XSL或XML文件。我要刪除我的答案。這可能是有一個默認的命名空間。 –

+0

沒有名稱空間。實際的文件「root」如示例所示(當然簡化了示例)。 –

回答

1

我們無法看到您的XML或XSL的其餘部分,但您的value-of語句如圖所示工作。

<xsl:template match="/"> 
    <xsl:value-of select="/root/elem[condition='B']/value"/> 
</xsl:template> 

這一工程,並返回555

由於Flynn1179指出,在評論中,你可能XML包含默認命名空間,因此不被考慮到的XPATH。

嘗試添加命名空間的XPATH內聯(與實際URL替換http://yournamespace-here.example.com):

/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='root']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='elem'][condition='B']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='value'] 

或給它一個前綴的XSL

xmlns:myPrefix="http://yournamespace-here.example.com" 

,然後補充說,以您的XPATH

/myPrefix:root/myPrefix:elem[condition='B']/myPrefix:value 
+0

'[condition ='B']'也應該寫''myPrefix:condition ='B']',對不對? –

+0

默認名稱空間不適用於屬性,請參閱:http://www.w3.org/TR/REC-xml-names/#defaulting –

+0

沒有名稱空間。實際的文件「root」如示例所示(當然簡化了示例)。其他人都適用。我有大約一百個其他價值的陳述和很多條件。這是唯一需要在select子句中聲明的value-of語句。 –

相關問題