мой первый пост здесь - очень надеюсь, что кто-то узнает ответ!Я смог найти решение для многих проблем, которые у меня были, но не для этого.Вопросы и ответы на этом сайте по той же теме не решили мою проблему ...
У меня есть xml, содержащий спецификации формата, такие как
<Format>
<TagNr>92</TagNr>
<Option>A</Option>
<Format>//[N]15d</Format>
</Format>
<Format>
<TagNr>92</TagNr>
<Option>B</Option>
<Format>//3!a/3!a/15d</Format>
</Format>
TagNr + - уникальная комбинация вэтот набор узлов.
Я определил ключ, чтобы упростить использование набора форматов:
<xsl:key name="xx" match="//Format/Format" use="concat(../TagNr, ../Option)"/>
Я действительно могу использовать этот ключ и получить правильное значение, но только в не специальных элементах;Я получаю сообщение об ошибке «Ошибка в выражении XPath 2.0 Не элемент узла» при использовании этого ключа в рамках for-каждой или других конструкций, подобных приведенной ниже.
Я пытаюсь добиться следующего: в других обработанных узлахесть строка опций, для которых я хочу получить формат для каждого символа.Например:
<Tag>
<TagNr>92</TagNr>
<Options>AB</Options>
</Tag>
Я пробовал много вариантов из нижеприведенного, но не повезло:
<xsl:variable name="TN"><xsl:value-of select="TagNr"/></xsl:variable>
<xsl:variable name="optList">
<xsl:analyze-string select="./Options" regex="[A-Z]">
<xsl:matching-substring>
<xsl:variable name="TNO" select="concat($TN, .)"/>
<opt>
<tag><xsl:value-of select="$TNO"/></tag>
<fmt><xsl:value-of select="key('xx', $TNO)"/></fmt>
</opt>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
Разбиение на отдельные символы с помощью регулярных выражений проходит нормально и при получении (только)значение для opt / tag тоже подходит.Но когда я добавляю opt / fmt, я сталкиваюсь с упомянутым сообщением об ошибке для выражения Xpath select = "key ('xx', $ TNO)" .
Я попытался определить переменнуюна основе функции клавиш, как было предложено в другой теме на этом сайте, но не удалось.
Кто-нибудь может мне помочь?