2016-06-22 1 views
0

я пытаюсь выбрать пункты с не курсивом в них (XSLT 2.0):выбор XSLT: если есть хотя бы один потомок без определенных критериев

<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> 

Я только хочу иметь р [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

Для первой части вы просто хотите

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

Для второй части

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