XSL: как ограничить выбор в apply-шаблонах на основе отдельного элемента XML - PullRequest
1 голос
/ 10 ноября 2010

Вот пример того, что я пытаюсь сделать.XML:

<TEST>
  <NODE>
    <A id="ELEMENT_1"/>
    <A id="ELEMENT_2"/>
    <A id="ELEMENT_3"/>
  </NODE>
  <SOME_OTHER_NODE>
    <B nodeId="ELEMENT_1" invalid="1"/>
  </SOME_OTHER_NODE>
</TEST>

XSL:

<xsl:apply-templates select="A[?? only select the A's where there is no B where A/@id = B/@nodeId and B/@invalid = 1 ??]"/>

Возможно ли это вообще?В настоящем xsl у меня сейчас есть что-то вроде этого:

<xsl:apply-templates select="(ANSWER|GROUP)[position() mod 2 = 0]"/>

И я хочу найти способ ограничить выбранный ОТВЕТ на основе другого элемента в xml.Надеюсь, я четко объяснил это, дайте мне знать, если нет.Возможно, есть лучший способ сделать что-то подобное.Я открыт для любых отзывов или предложений.Благодаря.

1 Ответ

2 голосов
/ 10 ноября 2010

Это выражение XPath (сравнение набора узлов) с NODE в качестве контекста:

A[not(@id = ../../SOME_OTHER_NODE/B[@invalid='1']/@nodeId)]

с ключами:

<xsl:key name="kInvalidTest" match="B[@invalid=1]" use="@nodeId"/>
...
<xsl:appy-templates select="A[not(key('kInvalidTest',@id))]"/>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...