2010-04-26 67 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