Я пытаюсь использовать функцию, чтобы найти все числа из элемента или строки. Количество номеров и их статистика не должны иметь значения. Ранее я написал следующие функции:Как найти все числа в строке
<xsl:function name="itp:find_num">
<xsl:param name="tmp"/>
<xsl:if test="matches($tmp,'\d+')">
<xsl:analyze-string select="$tmp" regex="{'\d+'}">
<xsl:matching-substring>
<xsl:sequence select="."/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="''"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:if>
</xsl:function>
пример XML:
<address>street 12, 12345 town<address>
В вызове функции должно быть соответствующее число может быть выбрано:
...select="itp:find_num(address)[2]"/>
К примеру, 2 для Почтовый индекс. Проблема в том, что в последовательности также есть пустые значения, так что на практике я достигаю почтовый индекс только с помощью [4].
Есть ли более элегантный способ решить мою проблему? И если нет, как удалить пустые элементы из последовательности?
Сейчас на английском языке :-)
Я пытаюсь найти все числа в строке или элемента. Не имеет значения, сколько номеров доступны или в каком положении они находятся в строке.
Вот моя функция:
<xsl:function name="itp:find_num">
<xsl:param name="tmp"/>
<xsl:if test="matches($tmp,'\d+')">
<xsl:analyze-string select="$tmp" regex="{'\d+'}">
<xsl:matching-substring>
<xsl:if test=". != ''">
<xsl:sequence select="."/>
</xsl:if>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="''"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:if>
</xsl:function>
Пример XML
<address>street 12, 12345 town<address>
Когда я вызываю функцию, я хочу, чтобы выбрать, какой номер я хочу, чтобы выбрать:
...select="itp:find_num(address)[2]"/>
Par пример [2] для почтового кода. Проблема У меня есть, что в последовательности есть пустые элементы, поэтому я должен выбрать [4], чтобы получить почтовый код.
Есть ли способ решить мою проблему? Или есть способ удалить все пустые элементы в этой последовательности?
Спасибо :-)
Christian Manthey, Вас может заинтересовать более простое, более короткое, чистое решение XPath. –