Я не могу заставить это работать, поэтому мне нужна помощь ...
Мой xml выглядит как
<tag>PV1FEPMEDIRSPT530000030412011-04-08OC.CF.QL0000 XXR50067171277HIPAA5010TEST1470000020812011-07-13-13.25.49.846947071320112600003971A1SUPERPSA SUPERPSA0711201107152011 085 90 KIYEC M1R50067171277HIPAA5010TEST1470000020812011-07-13-13.25.49.846947071320112600003971A1SUPERPSA SUPERPSA0711201107152011 085 50 XIMUK </tag>
Это на самом деле текстовая запись, заключенная в <tag/>
элементы,
В приведенном выше значении элемента tag может быть одна или несколько записей после заголовка, который имеет 59 символов.первая позиция записи начинается в столбце 60 и продолжается до 360. Размер записи фиксированный, 300 символов.Последующие записи могут появиться после этого.
Необходимость рекурсивного чтения значения элемента в позициях 60 и 61 (или, скажем, для следующей записи 360 и 361) содержит «M1», а затем искать позицию после 221 пробела для индикатора «50».
Проверка первого индикатора 'M1' и индикатора '50' на фиксированной длине проста, но чтение следующей части строки становится затруднительным, поскольку число записей может быть до 50.
У меня есть примитивXSL, когда он соответствует только первой записи ...
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
xmlns:regexp="http://exslt.org/regular-expressions"
xmlns:exsl="http://exslt.org/common" extension-element-prefixes=" regexp str exsl"
exclude-result-prefixes="regexp str exsl">
<xsl:preserve-space elements="tag"/>
<xsl:output method="text"/>
<xsl:variable name="msg">
<xsl:value-of select="tag/text()"/>
</xsl:variable>
<xsl:template match="/">
<xsl:call-template name="searchRecursive">
<xsl:with-param name="msg835" select="$msg"/>
<xsl:with-param name="m1Indicator" select="60"/>
<xsl:with-param name="indicator" select="283"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="searchRecursive">
<xsl:param name="msg835" />
<xsl:param name="m1Indicator"/>
<xsl:param name="indicator"/>
<xsl:choose>
<xsl:when test="substring($msg835,$m1Indicator,2) = 'M1' and substring($msg835,$indicator,2) = '50'">
**test successful**
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="searchRecursive">
<xsl:with-param name="msg835" />
<xsl:with-param name="m1Indicator" select="$m1Indicator + 300"/>
<xsl:with-param name="indicator" select="$indicator + 300"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Может кто-нибудь помочь мне расширить его.Спасибо!