Использование Xpath для извлечения узлов, удовлетворяющих определенным критериям, на основе значений атрибутов - PullRequest
1 голос
/ 26 апреля 2010
<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, который возвращает дочерние элементы узла, чей идентификатор, например, "QA03"

Большое спасибо заранее

Ответы [ 3 ]

0 голосов
/ 26 апреля 2010

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 голосов
/ 26 апреля 2010

Использование :

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

Можно также использовать стандартную функцию XPath id().

Однако для этого необходимо наличие DTD для документа XML, который определяет id как «атрибут типа ID» .

Пример : id('QA03')/node()

0 голосов
/ 26 апреля 2010

Я не уверен, что полностью понимаю вашу схему, но возвращение потомков узла на основе атрибута id этого узла будет выглядеть примерно так:

//*[@id='QA03']/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...