2013-07-15 34 views
0

鑑於這種XML使用XPath定位與屬性和兒童複雜元素

<well bulkShift="0.000000" diameter="5.000000" hidden="false" name="67-1-TpX-10" filename="67-1-TpX-10.well"> 
    <metadata/> 
    <unit>ftUS</unit> 
    <colour blue="1.000000" green="1.000000" hue="" red="1.000000"/> 
    <tvd clip="false"/> 
    <associatedcheckshot>25-1-X-14</associatedcheckshot> 
    <associatedwelllog>HDRA_67-1-TpX-10</associatedwelllog> 
    <associatedwelllog>NPHI_67-1-TpX-10</associatedwelllog> 
</well> 

我可以但是我需要很多的,我更具體的與這個XPath

//well[@bulkShift=0 and @diameter=5 and @hidden='false' and @name='67-1-TpX-10' and @filename='67-1-TpX-10.well'] 

選擇元素因爲子元素(元數據,單元,顏色等)可以以任何順序出現在元素中,所以需要找到具有這些特定子節點的元素。

理想情況下,我希望能夠選擇此節點只有一個XPath查詢。

任何人都可以幫忙嗎?

回答

3

這個模板匹配也童車和歸因於孩子的

<xsl:template match="well[@hidden='false'][./unit='ftUS' or ./tvd/@clip='false']"> 
    well found! 
</xsl:template> 

或一氣呵成:

<xsl:template match="well[@hidden='false' and (./unit='ftUS' or ./tvd/@clip='false')]"> 
    well found! 
</xsl:template> 
+0

我正在學習'XPATH'。所以我有一個問題給你。爲什麼'[@ hidden ='false'] [./ unit ='ftUS'或。/ tvd/@ clip ='false''不能寫在一個'[..]'裏面?可能是一個愚蠢的問題,但我需要知道,以減少我的理解差距。 –

+0

這也有可能...... – rene

+0

好吧。所以這兩個'[]'是用於'和'操作?如果我想把它寫在單個'[]'中,我應該怎麼寫? –

1

您可以添加測試孩子們喜歡的測試屬性的謂詞 如:

//well[@bulkShift=0 and @diameter=5 and @hidden='false' and @name='67-1-TpX-10' and @filename='67-1-TpX-10.well'] 
    [metadata and unit and colour] 

有一個列表關閉謂詞[ predicate1 ][ predicate2 ]與具有和操作相同。

+0

這不完全正確。多個謂詞改變'position()'的值。如果你不使用'position()',那麼它們是相等的。 –