У меня есть список условий, и я хочу проверить, соответствует ли непосредственный брат элемента какому-либо из этих условий.
Если эти условия являются простыми именами тегов, это достаточно просто.
<xsl:param name="tag-list" select="tokenize('img figure table', '\s+')"/>
<xsl:template match="* | text()">
<xsl:variable name="next-name" select="name(following-sibling::*[1])" />
<xsl:if test="$next-name = $tag-list">
<!-- DoSomething -->
</xsl:if>
</xsl:template>
Этот шаблон будет соответствовать любому элементу или текстовому узлу и будет делать DoSomething, если ближайший родственник этого узла либо <img>, <figure> or <table>
.
Однако я хочу проверить более сложные условия. Как я могу делать только DoSomething для случаев, когда шаблон соответствует элементам с одноуровневым элементом с указанным атрибутом c, дочерним или текстовым значением? Я бы предпочел сделать это с одним <xsl:if>
, так как этот список родственных состояний может быть довольно длинным.
<xsl:param name="tag-list" select="tokenize('img[@src] figure[text()] table[tbody]', '\s+')"/>
<xsl:template match="* | text()">
<xsl:if test="???">
<!-- DoSomething -->
</xsl:if>
</xsl:template>