#xml #xslt #xslt-2.0
#xml #xslt #xslt-2.0
Вопрос:
Мне нужно удалить double
из строки с помощью single
с помощью XSLT.
Например: 31646331175
: Мне нужен вывод этого как 31646331175.
Если есть только один плюс или плюса вообще нет, то полностью игнорируйте строку.
Комментарии:
1. Вы пробовали использовать
replace
функцию ( maxtoroq.github.io/xpath-ref/fn/replace.html ) затем? Как произошел сбой?2. Я согласен с Мартином, здесь.
replace()
функция, похоже, подходит. Но вы уверены, что хотите заменитьна
, а не также «свернуть»
на
?
3. да, Martin replace выдает мне эту ошибку: Описание: Синтаксическая ошибка при символе 0 в регулярном выражении: Нет выражения перед квантором, я пытался использовать <xsl:value-of select=»заменить ($value, ‘ ‘, ‘ ‘)»/>
Ответ №1:
Вы можете сделать это с помощью функции XSLT-2.0 analyze-string
.
Таким образом, следующий код XSLT мог бы выполнить эту работу:
Введите XML:
<root>
<str> 0049134-343-285</str>
<str> 00421335-645-784</str>
<str>49134543-346-283</str>
<str> 0042134-347-282</str>
<str> 0041134-349-282</str>
</root>
Обработка файла XSLT-2.0:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/root/str">
<xsl:analyze-string select="text()" regex=" ( .*)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><xsl:text>amp;#xa;</xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
Вывод:
0049134-343-285
0042134-347-282
0041134-349-282
Другой комбинацией шаблонов может быть следующая, использующая matches
функцию:
<xsl:template match="text()" />
<xsl:template match="str[matches(text(),'^ [^ ] ')]">
<xsl:value-of select="substring-after(text(),' ')"/><xsl:text>amp;#xa;</xsl:text>
</xsl:template>
Это выражение еще более точное, потому что оно исключает строки с тремя
или более в начале строки.
Я надеюсь, что этого достаточно для ваших нужд.
Комментарии:
1. Это кажется чрезмерно сложным по сравнению с простым вызовом replace().