Использование заканчивается в XSLT v1.0

Я пытаюсь отредактировать текущий XSLT. Функциональность, которую я хочу, - это когда значение "//code_no" заканчивается 01. Я хочу отредактировать текущее местоположение города. В настоящее время этой функции не существует. Я пробовал использовать строку и подстроку, но это дает мне ошибку, говорящий, что концы с функциональностью не существуют. Пожалуйста, помогите

Значение, исходящее из xml, равно

<code_no>
1870410001
</code_no>

в xsl, я хочу напечатать это, когда значение заканчивается на 01.

<td align="left" width="33%"><SPAN style="font-size: 12pt; font-family: Arial;">
    <a> <b><u><xsl:value-of select="//city"/>, <xsl:value-of select="//state"/> 
    </u></b></a></SPAN></td>

Ответ 1

эквивалент XPath 1.0 (выражение XPath 2.0):

ends-with($s, $t)

является

$t = substring($s, string-length($s) - string-length($t) +1)

Вам нужно просто подставить $s и $t в последнем выражении XPath с, соответственно, проверяемой строкой и завершающим окончанием.

Вот полный пример:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="x|y">
     <xsl:value-of select="name()"/> ends-with '_01': <xsl:value-of select=
     "'_01' = substring(., string-length() - 2)"/>
=============   
 </xsl:template>
</xsl:stylesheet>

, когда это преобразование применяется к следующему XML-документу (в вопросе!!!):

<t>
 <x>abcd_01</x>
 <y>abcd_11</y>
</t>

выдается желаемый, правильный результат:

x ends-with '_01': true
=============   
 y ends-with '_01': false
=============   

Ответ 3

Я использовал

contains($string, $part) and normalize-space(substring-after($string, $part)) = ''

Где

мы проверяем, заканчивается ли $string с помощью $part

Ответ 4

Не совсем кончается, но лучше выглядит, чем подстрочное решение, и по-прежнему подходит для определенных ситуаций:

<xsl:template match="*[contains(name(), 'substr')]"/>

Ответ 5

В особых случаях, если вы знаете, что какой-то символ не может содержаться в теге, например, § вы можете сделать это:

<xsl:if test="contains(concat(code_no,'§'),'01§')">
  <td align="left" width="33%"><SPAN style="font-size: 12pt; font-family: Arial;">
    <a> <b><u><xsl:value-of select="//city"/>, <xsl:value-of select="//state"/> 
    </u></b></a></SPAN></td>
</xsl:if>