使用Xpath根据属性值检索满足特定条件的节点 戳 有点 1. 3. 5. 发展 有点 1. 2. 5.

使用Xpath根据属性值检索满足特定条件的节点 戳 有点 1. 3. 5. 发展 有点 1. 2. 5.,xpath,attributes,Xpath,Attributes,鉴于上述模式,我想知道如何构建一个Xpath查询,该查询返回id为“QA03”的节点的子节点,例如 非常感谢您提前我不确定我是否完全理解您的模式,但是基于节点的id属性返回节点的子节点 <AgoraServersConfig> <AgoraServers id="NYQ1"> <AgoraName>prod</AgoraName> <TableName>someTable</TableName>

鉴于上述模式,我想知道如何构建一个Xpath查询,该查询返回id为“QA03”的节点的子节点,例如


非常感谢您提前

我不确定我是否完全理解您的模式,但是基于节点的id属性返回节点的子节点

<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']/*
如果您想做一些更具动态性的事情,可以将id放入变量中,例如

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

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

也可以使用标准XPath函数

但是,要使其工作,XML文档必须有一个DTD,该DTD将
id
定义为


示例
id('QA03')/node()

好问题,+1。有关两个完整的解决方案,请参见我的答案。:)谢谢olly,我使用了您的“静态”xpath…运行良好:)
<xsl:variable name="targetid">QA03</xsl:variable>
<xsl:for-each select="/AgoraServersConfig/AgoraServers[@id=$targetid]/*">
    <xsl:copy-of select="."/>
</xsl:for-each>