2017-01-13 6 views
0

Я знаю несколько функций XPath, таких как tokenize, substring-after, substring-before и т. Д. Каков наилучший способ извлечения всех имен переменных из заданной строки с использованием функций Xpath?

Например:

Строка: шустрый $ {firstVar} прыгнул с $ {secondVar}, а затем $ {thirdVar}

Вывод: Если дать firstVar, secondVar, thirdVar, будет использовать XSL : for-each для перебора переменных.

ответ

3

Самый удобный способ разбора строки для таких переменных - использовать <xsl:analyze-string>, хотя это функция XSLT, а не функция XPath по вашему запросу. Вам просто нужно определить шаблон для переменных, а затем получить результаты в <xsl:matching-substring>, например:

<xsl:analyze-string select="[[[xpath selector for your string]]]" 
     regex="\$\{.+\}"> 
    <xsl:matching-substring> 
     [[[ do your processing of the variable names here ]]] 
    </xsl:matching-substring> 
    </xsl:analyze-string> 

Вы найдете более подробную информацию об использовании в W3C спецификации документа: https://www.w3.org/TR/xslt20/#analyze-string

1

Вы могли бы что-то вроде

tokenize($input, '(^.|\}).*?(\$\{|$)') 

Мне пришлось использовать «^». а не «^», чтобы обойти правило, что разделитель не может быть пустой строкой, поэтому он не будет соответствовать переменной в начале строки. Вы можете обойти это, объединив пространство в начале строки, но, вероятно, более умный способ.