Я пытаюсь пересечь все узлы с текстом в моем документе из определенного места.XSLT получить все узлы с текстом
<xsl:template name="interpret_text">
<xsl:param name="location"/>
<xsl:for-each select="$location//text()">
<xsl:choose>
<xsl:when test="name(.) = tag_im_looking_for">
<!-- various code stuff and closing tags -->
Этот код является функциональным, за исключением случаев, когда вы можете заметить мою проблему. Когда я вхожу в цикл for-each, текст забыл свой тег. значение current() является сырым текстом и больше не запоминает его владельца. Я попытался настроить свой алгоритм на выбор узлов, а затем только разбор текста с текстом. Например:
<xsl:template name="interpret_text">
<xsl:param name="location"/>
<xsl:for-each select="$location//node()">
<xsl:if test="not(text() = '')">
<xsl:choose>
<xsl:when test="name(.) = tag_im_looking_for">
<!-- various code stuff and closing tags -->
Однако каким-то образом этот алгоритм работает для меня. Предположим, что xml ниже не имеет лишних пробелов, которые необходимо нормализовать.
<a>
<b>
before
<c>inner text</c>
after
</b>
</a>
Вверх algorthim будет работать в этом порядке.
before
inner text
after
Дно будет работать в таком порядке
b context
c context
Но есть текст до и после того, как контекст с, и мне нужно, чтобы разобрать «до», то «внутренний текст», то после". Примечание. Мне нужен этот алгоритм для работы на любой глубине и с текстом «до» или «после» или без него. Есть ли простой путь от решения узла или текстового решения, чтобы получить желаемый результат?
Может быть, вы хотите 'тока()'? –
Знаете ли вы о синтаксисе 'node [cond]' xpath? – o11c
Также я не вижу смысла иметь «xsl: param» вместо того, чтобы просто использовать текущий узел во время вызова ... – o11c