Как проверить имя элемента в пространстве имен в xsl - PullRequest
1 голос
/ 15 апреля 2011

Я занимаюсь разработкой xforms и имею шаблон, соответствующий выбранным элементам. Если это один выбор вместо нескольких, я хочу добавить пустое значение в начало списка:

<xsl:template match="xforms:select1|xforms:select">
    <xsl:apply-templates select="node()" />
    <xsl:if test=".[name()='xf:select1'] and not (@appearance eq 'full')">
        <xforms:item>
            <xforms:label />
            <xforms:value />
        </xforms:item>
    </xsl:if>
    ...

Проблема в том, что это работало для одной из моих форм, у которой xf:select1 (так как match распознает пространство имен), но элементы управления xforms:select1 в другой форме были сломаны, так как тест name() только для струнных.

Есть ли способ сделать это, если оператор работает, независимо от того, какой префикс я задаю для пространства имен http://www.w3.org/2002/xforms?

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Вы определенно хотите избежать любого кода, который опирается на префиксы пространства имен. Я думаю, что вы хотите использовать собственную ось:

<xsl:if test="self::xforms:select1 and not (@appearance eq 'full')">
0 голосов
/ 15 апреля 2011

То, что я сделал, разделил if на разные шаблоны ... Мне это нравится, потому что это то, для чего предназначен xsl; Я ненавижу это, потому что это еще одна копия некоторой логики сопоставления, которую пришлось бы менять в нескольких местах, если бы в ней была ошибка или улучшение ...

<xsl:template match="xforms:select1[not(xforms:itemset) and not(@appearance eq 'full')]" priority="10">
    <xsl:apply-templates select="node()" />
    <xforms:item>
        <xforms:label />
        <xforms:value />
    </xforms:item>
    <xsl:call-template name="select-itemset"/>
</xsl:template> 

<xsl:template match="xforms:select1[not(xforms:itemset)]|xforms:select[not(xforms:itemset)]">
    <xsl:apply-templates select="node()" />
    <xsl:call-template name="select-itemset"/>
</xsl:template>

<xsl:template name="select-itemset">
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...