Вопрос для начинающих по XSLT "apply-templates" - PullRequest
1 голос
/ 23 февраля 2011

Для очень простого XML, подобного этому:

<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
    <cd>
        <title>Greatest Hits</title>
        <artist>Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
    </cd>
</catalog>

и простого xslt:

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

почему он производит вывод, например:

Empire Burlesque
Bob Dylan
USA
Columbia
10.90
1985

Hide your heart
Bonnie Tyler
UK
CBS Records
9.90
1988

Greatest Hits
Dolly Parton
USA
RCA
9.90
1982

Куда делись все теги XML?Должен ли я окружить <xsl:apply-templates/> тегами <xsl:copy>, чтобы это работало?

1 Ответ

5 голосов
/ 23 февраля 2011

Это из-за встроенных шаблонов, которые посещают все элементы и печатают значения узлов текста и атрибутов (при условии, что шаблон применяется к ним).См. Мой ответ на этот предыдущий вопрос для полного объяснения:

XSLT 1.0 печать текстовых узлов по умолчанию

Вы можете использовать xsl:copy для выполнения идентификации transform :

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

, который выведет копию исходного документа.

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