У меня есть цикл между дочерними узлами я могу иметь слово в ВОК: блок, чем другое слово, как:Написать микс (тег + текст) заменить только конкретный узел
<mynode>
Hi ok
<fo:block>
hi ok fo block
< /fo:block>
maybe another text node here...
</mynode>
я должен заменить <fo:block>
с <div>
но я должен оставить текст в том же положении (до и, возможно, после того, как фо: блок, если он существует)
Я пытаюсь этот код, но (допустим к ребенку контура (*) узлы):
<xsl:for-each select="/mynode">
<xsl:if test="text()"><xsl:value-of select="text()"/></xsl:if>
<xsl:for-each select="child::*">
<!--for every child node of mynode-->
<xsl:choose>
<xsl:when test="normalize-space(local-name())
= normalize-space('block')">
<xsl:call-template name="fo-block">
<xsl:with-param .../>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="text()"><xsl:value-of select="text()"/></xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
if test = text(), поэтому узел содержит текст, а затем выводит текст, в противном случае я получаю имя узла и проверяю, является ли блок: если это так, я вызываю конкретный шаблон, иначе тест, если содержит текст.
Кажется, что нужно работать на данный момент. Так может быть правильный выбор/код для моего объема?
спасибо!
Роби
Какова цель двух шаблонов, соответствующих 'комментария()' и 'обработка-инструкция()'? Эти узлы уже обрабатываются шаблоном преобразования идентификаторов.AFAICT, единственным эффектом этих шаблонов является создание сообщения об ошибке «Ошибка: неоднозначное совпадение правил для ...». –
Я подозреваю, что, когда я сделал свою версию удостоверения личности лет назад, я угадал их, потому что я часто хочу рассматривать их отдельно. Они не обрабатываются общим правилом, которое я дал изначально, потому что они не совпадают с шаблоном соответствия '@ * | *' (если только я не пропущу что-то здесь). Но я могу сделать ваше наблюдение истинным и удалить их, если вам нравится –