xsl if условие для отображения элементов того же уровня - PullRequest
1 голос
/ 03 февраля 2012

Как я могу отобразить те же значения элемента уровня после условия

Например

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>

XSLT

<xsl:if test="/catalog/cd/country='UK'">
    <xsl:value-of select="title"/>
    <xsl:value-of select="artist"/>
</xsl:if>

Это не будет противоречить названию и исполнителю британских элементов уровня

Я знаю, что один из способов решить это - использовать для каждого цикла, но я ищу эффективный метод

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Это можно сделать, используя только шаблоны:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/catalog/cd[country='UK']" priority="1">
        <xsl:value-of select="title"/>
        <xsl:value-of select="artist"/>
    </xsl:template>
    <xsl:template match="/catalog/cd">
        <!--  handle non-UK CDs here -->
    </xsl:template>
</xsl:stylesheet>

Есть много других способов - конечно, в зависимости от ваших требований - организовать шаблоны для генерирования желаемого результата. Например, вы можете получить явные шаблоны для обработки элементов title и artist (или для явного сокрытия всех других дочерних элементов каждого cd).

Все это зависит от ваших конкретных потребностей, но общая мысль, которую я хотел показать здесь, заключается в том, что вы получаете большую мощность (и в итоге получаете более чистый код), когда вы правильно ловите целевые элементы в совпадении шаблона (вместо ad-hoc условных выражений).

3 голосов
/ 03 февраля 2012

Это:

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

<xsl:template match="/catalog/cd">
    <xsl:if test="country = 'UK'">
        <xsl:value-of select="title"/>
        <xsl:value-of select="artist"/>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

Производит:

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

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