2010-04-26 115 views
1
<AgoraServersConfig> 
    <AgoraServers id="NYQ1"> 
    <AgoraName>prod</AgoraName> 
    <TableName>someTable</TableName> 
    <Rule_ID>1</Rule_ID> 
    <Rule_ID>3</Rule_ID> 
    <Rule_ID>5</Rule_ID> 
    </AgoraServers> 
    <AgoraServers id ="QA03"> 
    <AgoraName>dev</AgoraName> 
    <TableName>someTable</TableName> 
    <Rule_ID>1</Rule_ID> 
    <Rule_ID>2</Rule_ID> 
    <Rule_ID>5</Rule_ID> 
    </AgoraServers> 
</AgoraServersConfig> 

鑑於上述模式,我想知道如何構造一個Xpath查詢,該查詢返回ID爲「QA03」的節點的子節點,例如。使用Xpath檢索滿足特定條件的節點,基於屬性值

提前非常感謝

+0

很好的問題,+1。看到我的答案有兩個完整的解決方案:) – 2010-04-26 16:24:00

回答

0

使用

/*/*[@id='QA03']/node()

也可以使用標準的XPath功能id()

但是,爲此,XML文檔必須有一個DTD,它將id定義爲"ID-type attribute"

id('QA03')/node()

+0

謝謝dimitre ...是的,使用標準的DTD,所以沒有問題的ID .. – 2010-04-28 15:40:28

0

我不知道我完全理解你的模式,而是返回基於節點的id屬性會看起來像

//*[@id='QA03']/* 
0

中的XPath將一個節點的孩子看起來像這樣:

/AgoraServersConfig/AgoraServers[@id='QA03']/* 

如果你想做一些更動態的事情,你可以把id放入一個變量,例如

<xsl:variable name="targetid">QA03</xsl:variable> 
<xsl:for-each select="/AgoraServersConfig/AgoraServers[@id=$targetid]/*"> 
    <xsl:copy-of select="."/> 
</xsl:for-each> 
+0

感謝olly,我去了你的'靜態'xpath ...工作得很好:) – 2010-04-28 15:39:24