xslt选择:如果至少有一个后代没有特定条件

时间:2016-06-22 12:09:30

标签: xslt-2.0

我尝试选择其中没有斜体文字的段落(xslt 2.0):

<p>Some <hi rend="italic">italic text</hi></p>
<p>Some <hi rend="bold">bold text</hi> and some <hi rend="italic">italic Text</hi></p>
<p>Some <hi rend="bold">bold text</hi></p>

我只想要p [3]。我试过这个并且它有效:

  <xsl:template match="p">
     <xsl:if test="p[not(child::hi[@rend='italic'])]"> ... do something </if>
  </xsl:template>

但我真正的问题是将这一级别更深入:我只希望那些至少一段没有斜体文字的文本:

<text>
    <p>Some Text</p>
    <p>Some <hi rend="bold">text</hi> and some <hi rend="italic">italic</hi> text</p>
</text>
<text>
    <p>Some <hi rend="bold">text</hi></p>
    <p>Some other text</p>
</text>
<text>
    <p>Some <hi rend="italic">text</hi></p>
    <p>Some <hi rend="italic">text</hi></p>
</text>

如何选择前两个文本而不是第三个文本?

1 个答案:

答案 0 :(得分:1)

对于第一部分,您只需要

<xsl:template match="p[not(hi[@rend = 'italic'])]">...</xsl:template>

第二部分

<xsl:template match="text[p[not(hi[@rend = 'italic'])]]">...</xsl:template>