xsl - несколько xsl: если с тем же условием - PullRequest
2 голосов
/ 11 июня 2010

Вопрос новичка на xslt. У меня есть несколько xsl: если проверяет, как

<xsl:if test="node/node1"> ...</xsl:if>
...
<xsl:if test="node/node1"> ...</xsl:if>
...
<xsl:if test="node/node1"> ... </xsl:if>

Есть ли способ параметризации условия теста, чтобы сделать код более читабельным и простым в обслуживании? Может быть с переменной или что-то вроде

<xsl:variable name="node1Present" select="true()"/>
<xsl:if test="$node1Present"> ... </xsl:if>

Я не понимаю, как сконструировать переменную, чтобы отразить «проверить наличие узла» (test = "node / node1")

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

В XPath любое выражение, которое возвращает истинное (то есть непустое) значение, рассматривается как true в логическом контексте.

<xsl:variable name="node1Present" select="node/node1"/>
<xsl:if test="$node1Present"> ... </xsl:if>

Это не значит, что пытается его сделал бы мир взорваться.; -)

2 голосов
/ 11 июня 2010
<xsl:variable name="node1Present" select="boolean(node/node1)"/>

Для наборов узлов boolean() преобразуется в true, если и только если набор узлов не пуст.

0 голосов
/ 11 июня 2010

Помимо правильных ответов, я бы рекомендовал следующий рефакторинг:

Заменить

<xsl:if test="node/node1"> ...</xsl:if> 
... 
<xsl:if test="node/node1"> ...</xsl:if> 
... 
<xsl:if test="node/node1"> ... </xsl:if>

с

<xsl:if test="node/node1"> ...</xsl:if> 
... 

или с:

... 
<xsl:if test="node/node1"> ... </xsl:if>

То есть весь код, который зависит от условия, помещается в один <xsl:if>.

Было бы очень интересно, если бы вы могли представить код, который не может быть реорганизован таким образом. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...