Я работаю с документом OpenXML, обрабатывая основную часть документа с помощью некоторого XSLT.Можно ли перейти к родительскому узлу согласованного узла во время обработки XSLT?
Я выбрал набор узлов с помощью
<xsl:template match="w:sdt">
</xsl:template>
В большинстве случаев, я просто нужно заменить, что согласованный узел с чем-то другим, и это работает отлично.
НО, в некоторых случаях мне нужно заменить не узел w: sdt, который соответствует, но ближайший узел предка w: p (т.е. узел первого абзаца, содержащий узел sdt).
Фокус в том, что условие, используемое для решения того или иного, основано на данных, полученных из атрибутов узла sdt, поэтому я не могу использовать обычный xslt xpath filter.
Я пытаюсь сделать что-то вроде этого
<xsl:template match="w:sdt">
<xsl:choose>
<xsl:when test={first condition}>
{apply whatever templating is necessary}
</xsl:when>
<xsl:when test={exception condition}>
<!-- select the parent of the ancestor w:p nodes and apply the appropriate templates -->
<xsl:apply-templates select="(ancestor::w:p)/.." mode="backout" />
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- by using "mode", only this template will be applied to those matching nodes
from the apply-templates above -->
<xsl:template match="node()" mode="backout">
{CUSTOM FORMAT the node appropriately}
</xsl:template>
Вся эта концепция работает, но независимо от того, что я пытался, он всегда применяет форматирование из шаблона CUSTOM FORMAT к ш: р узел , НЕ является родительским узлом.
Это почти так, как если бы вы не могли ссылаться на родителя из соответствующего узла. И, может быть, вы не можете, но я не нашел никаких документов, которые говорят, что вы не можете
Любые идеи?
Похоже, это был трюк. благодаря – DarinH