2013-12-23 8 views
0

Я использую саксонской 9,0, версия 2. XSLTXSLT: сравнить два списка переменных

Если по крайней мере один элемент Comman в двух списках, то выход должен быть 1 в противном случае выход должен быть равен 0.

<xsl:variable name="var_1" select="tokenize("apple mango grape" ' ')"/> 
<xsl:variable name="var_2" select="tokenize("cat cow dog", ' ')"/> 


<xsl:choose> 
<xsl:when test="$var_1 in $var_2"> 
<xsl:value-of select="1"/> 
</xsl:when> 

<xsl:otherwise> 
<xsl:value-of select="0"/> 
</xsl:otherwise> 
</xsl:choose> 

Exapmple 1:

var_1 = 'яблоко', 'манго', 'виноградный'

var_2 = 'яблоко', 'кошка'

Ожидаемый результат: 1

Пример 2:

VAR_1 = 'яблоко', 'манго', 'виноградный'

var_2 = 'приложение', 'человек'

Ожидаемый результат: 0

Пример 3:

var_1 = 'яблоко', 'манго', 'виноградный'

var_2 = 'виноградный', 'яблоко', 'манго'

Ожидаемый результат: 1

Никто помочь мне получить эти ожидали Результаты.

Thanks SRB.

ответ

0

Если по крайней мере один элемент Comman в двух списках, то выход должен быть 1 в противном случае выход должен быть 0.

Это довольно-а именно то, что делает XPath «=» оператор.

Это просто

xs:integer($var1 = $var2) 
0

Способ, которым я решил бы это, разбив одну из переменных в списке, а затем воспользуюсь contains, чтобы найти его в другом списке.

Тогда есть этот список результатов contain проверяемых, чтобы увидеть, если он «содержит» в true дело и вернуть true если он делает, и false, если он не

Так что это будет что-то вроде этого:

<xsl:for-each select="tokenize("apple mango grape" ' ')> 
    <xsl:if test="contains(text(), 'apple cow dog')"> 
    1 
    </xsl:if> 
</xsl:for-each> 

Несовершенство, приложение также слово будет найдено в строке apple cow dog поэтому я предлагаю вам обернуть ваши слова с ~ или подобными, так что вы также искать ~app~, а не app.

+0

Спасибо за ответ. – srb

+0

Строка var_1 'apple mango grape' и var_2 исходит из атрибута xml-файла. Этот файл используется многими другими людьми, и поэтому я не имею большого контроля над ним. По вашему предложению я должен сгенерировать еще 2 списка, добавив ~ к каждому из элементов в var_1 и var_2. Затем выполните сравнение в соответствии с вашим кодом. Я прав? Спасибо, SRB – srb

+0

Да, добавьте ~ или просто замените '' на '~ ~' и добавьте один '~' в начале и один в конец. Затем tokenize – nrathaus

0

Ваш синтаксис является недействительным, в противном случае он бы работа, как вы ожидаете:

<xsl:variable name="var_1" select="tokenize('apple mango grape', ' ')"/> 
<xsl:variable name="var_2" select="tokenize('cat cow dog', ' ')"/> 

<xsl:template match="/"> 
<result> 
<xsl:choose> 
    <xsl:when test="$var_1 = $var_2"> 
     <xsl:value-of select="1"/> 
    </xsl:when> 

    <xsl:otherwise> 
     <xsl:value-of select="0"/> 
    </xsl:otherwise> 
</xsl:choose> 
</result> 

</xsl:template> 

возвращается:

<?xml version="1.0" encoding="utf-8"?> 
<result>0</result> 

в то время как:

<xsl:variable name="var_1" select="tokenize('apple mango grape', ' ')"/> 
<xsl:variable name="var_2" select="tokenize('cat cow mango dog', ' ')"/> 

<xsl:template match="/"> 
<result> 
<xsl:choose> 
    <xsl:when test="$var_1 = $var_2"> 
     <xsl:value-of select="1"/> 
    </xsl:when> 

    <xsl:otherwise> 
     <xsl:value-of select="0"/> 
    </xsl:otherwise> 
</xsl:choose> 
</result> 

</xsl:template> 

возвращается:

<?xml version="1.0" encoding="utf-8"?> 
<result>1</result> 
Смежные вопросы