добавление нескольких фильтров - PullRequest
0 голосов
/ 07 декабря 2011

Как я уже упоминал в этом посте: динамические несколько фильтров в xsl По сути, я хочу применить несколько фильтров к моему xml, используя цикл for, и эти фильтры являются динамическими, которые исходят из некоторого другого xml

что-то вроде этого:

foreach(list/field[@ProgramCategory=$Country][not(contain(@Program,$State1][not(contain(@Program,$State2][not(contain(@Program,$State3][not(contain(@Program,$Staten])

Проблема в том, что я могу получить нет. состояний, которые я получаю за цикл других XML.

Я не могу использовать функцию document (), как это было предложено Dimitre, поэтому я думал о ее достижении:

 <xsl:variable name="allprograms">
    <xsl:for-each select="/list2/field2">

            <xsl:text disable-output-escaping="yes">[not(contains(@Program,'</xsl:text><xsl:value-of select="@ProgramID"></xsl:value-of><xsl:text disable-output-escaping="yes">'))]</xsl:text>
                                                            </xsl:for-each>
</xsl:variable> 

дает мне что-то вроде этого:

[not(contains(@Program,'Virginia'))][not(contains(@Program,'Texas'))][not(contains(@Program,'Florida'))]

Я хочу использовать указанное выше значение в качестве фильтра в цикле for ниже, и я не уверен, как этого добиться

<xsl:for-each="list/field[not(contains(@Program,'Virginia'))][not(contains(@Program,'Texas'))][not(contains(@Program,'Florida'))]">

Перед этим у меня также есть цикл for для фильтрации. США

xsl:for-each="list/field $allprograms">
   <xsl:value-of select="@ows_ID" />
</xsl:for-each>

Я хочу, чтобы мой ответ был 1082, 1088 ..

Я тоже могу добавить сюда xml, если есть путаница ..

1 Ответ

0 голосов
/ 07 декабря 2011

Jack

Из предыдущего решения вам просто нужно добавить к этому:

 <xsl:param name="pFilteredStates"> 
  <state>Virginia</state> 
  <state>Texas</state> 
  <state>Florida</state> 
 </xsl:param> 

следующее (изменение текущего определения переменной, опирающейся на функцию document()):

<xsl:variable name="vFiltered" select= 
  "ext:node-set($pFilteredStates)/* 
  "/> 

Там, где префикс "ext:" должен быть привязан к этому пространству имен (это пространство имен EXSLT - если ваш XSLT-процессор не реализует exslt:node-set(), вам нужно найти расширение xxx:node-set(), которое он реализует, или указать нам какой у вас XSLT процессор и люди будут предоставлять эту информацию):

"http://exslt.org/common"

Итак, ваш <xsl:stylesheet> может выглядеть следующим образом:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">

Я все еще рекомендую, чтобы параметр $pFilteredStates был передан инициатором преобразования - в этом случае вы можете удалить определение $vFiltered и заменить каждую ссылку на него на $ pFilteredStates`, и преобразование должно работать OK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...