Код не достигнут - PullRequest
       1

Код не достигнут

0 голосов
/ 02 декабря 2011

У меня есть следующий код xsl:

<xsl:template match="/">
    <html>
       <!--some code here-->
     <body bgcolor="#FFFFFF">
         <xsl:apply-templates select="NAME" />
     </body>
    </html>
</xsl:template>        
<xsl:template name="NAME" match="NAME">
  <!--some code here-->
</xsl:template>

Но шаблон NAME никогда не достигается, например, У меня есть пустой HTML с <body></body>

Моя структура XML:

<ROOT>
    <MainNode>
        <NAMES>
            <NAME></NAME>
        </NAMES>
    </MainNode>
</ROOT>

В чем может быть причина?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Проблема связана с областью, в которой вы звоните apply-templates. Вы находитесь в корневом шаблоне, что означает, что текущий контекст (местоположение в XML) является корневым элементом. Когда вы используете select с apply-templates, XPath основывается на текущем контексте / местоположении.

В вашем случае вы применяете шаблоны ко всем NAME элементам в корне. Поскольку ничего не существует, ваш шаблон NAME никогда не вызывается. Как уже было предложено, должно работать следующее, предполагая, что структура, орфография и заглавные буквы верны в вашем примере:

<xsl:apply-templates select="ROOT/MainNode/NAMES/NAME" />

С другой стороны, этот XPath должен работать из любой точки документа, поскольку он ведет себя как абсолютный путь, начинающийся в корне документа:

<xsl:apply-templates select="/ROOT/MainNode/NAMES/NAME" />
1 голос
/ 02 декабря 2011

Попробуйте:

<xsl:apply-templates select="//Name" />

или укажите узел из корня документа:

<xsl:apply-templates select="ROOT/MainNode/Names/Name" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...