Разъяснение по обработке XSLT с использованием Xpath - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть два простых шаблона, перечисленных ниже, которые работают с некоторыми примерами данных, также перечисленными ниже:

<?xml version="1.0" encoding="utf-8?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" encoding="utf-8"/>

    <xsl:template match="Gallery/Tab/ImageGroup/Image">
        <xsl:apply-templates  select="imageText" />
    </xsl:template>

    <xsl:template match="imageText">
        <h2><xsl:value-of select="." /></h2>
    </xsl:template>

 </xsl:stylesheet>


<?xml version="1.0" encoding="utf-8"?>

<Gallery name="My Gallery">

    <Tab tabID="imageDivTab0" height="500" name="Team Wear">
        <ImageGroup>
            <Image>
                <imageName>Challenge-Badge.jpg</imageName>
                <imageURL>images/gallery/small/Tab1/</imageURL>
                <imageText>Challenge Badge</imageText>
            </Image>
        </ImageGroup>
    </Tab>

</Gallery>

Когда процессор работает, я получаю ожидаемый результат (отображается imageText), если я закомментирую первый шаблонполучить все отображаемое (imageName, imageURL и текст изображения).

Это потому, что второй шаблон пытается сопоставить 'imageText' без надлежащего контекста, то есть использует корневой узел, поэтому он отображает все.

Я довольно новичок в этом, поэтому любая помощь будет высоко ценится.

Приветствия

1 Ответ

1 голос
/ 14 ноября 2011

Существует несколько встроенных шаблонных правил.

Ссылка: http://www.w3.org/TR/xslt#built-in-rule

В вашем случае применяются следующие шаблоны:

<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>

и

<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...