Шаблон XSL, выводящий большой кусок текста, а не HTML.Но только на одном разделе - PullRequest
0 голосов
/ 18 марта 2010

У меня немного странная ситуация с шаблоном XSL.Большинство выводит нормально, но определенный цикл for-each вызывает у меня проблемы.

Вот XML:

<area>
<feature type="Hall">
    <Heading><![CDATA[Hall]]></Heading> 
    <Para><![CDATA[Communal gardens, pathway leading to PVCu double glazed communal front door to]]></Para> 
</feature>
<feature type="Entrance Hall">
    <Heading><![CDATA[Communal Entrance Hall]]></Heading> 
    <Para><![CDATA[Plain ceiling, centre light fitting, fire door through to inner hallway, wood and glazed panelled front door to]]></Para> 
</feature>
<feature type="Inner Hall">
    <Heading><![CDATA[Inner Hall]]></Heading> 
    <Para><![CDATA[Plain ceiling with pendant light fitting and covings, security telephone, airing cupboard housing gas boiler serving domestic hot water and central heating, telephone point, storage cupboard housing gas and electric meters, wooden panelled doors off to all rooms.]]></Para> 
</feature>
<feature type="Lounge (Reception)" width="3.05" length="4.57" units="metre">
    <Heading><![CDATA[Lounge (Reception)]]></Heading> 
    <Para><![CDATA[15' 6" x 10' 7" (4.72m x 3.23m) Window to the side and rear elevation, papered ceiling with pendant light fitting and covings, two double panelled radiators, power points, wall mounted security entry phone, TV aerial point.]]></Para> 
</feature>
<feature type="Kitchen" width="3.05" length="3.66" units="metre">
    <Heading><![CDATA[Kitchen]]></Heading> 
    <Para><![CDATA[12'  x 10'  (3.66m x 3.05m) Double glazed window to the rear elevation, textured ceiling with strip lighting, range of base and wall units in Beech with brushed aluminium handles, co-ordinated working surfaces with inset stainless steel sink with mixer taps over, co-ordinated tiled splashbacks, gas and electric cooker points, large storage cupboard with shelving, power points.]]></Para> 
</feature>
<feature type="Entrance Porch">
    <Heading><![CDATA[Balcony]]></Heading> 
    <Para><![CDATA[Views across the communal South facing garden, wrought iron balustrade.]]></Para> 
</feature>
<feature type="Bedroom" width="3.35" length="3.96" units="metre">
    <Heading><![CDATA[Bedroom One]]></Heading> 
    <Para><![CDATA[13' 6" x 11' 5" (4.11m x 3.48m) Double glazed windows to the front and side elevations, papered ceiling with pendant light fittings and covings, single panelled radiator, power points, telephone point, security entry phone.]]></Para> 
</feature>
<feature type="Bedroom" width="3.05" length="3.35" units="metre">
    <Heading><![CDATA[Bedroom Two]]></Heading> 
    <Para><![CDATA[11' 4" x 10' 1" (3.45m x 3.07m) Double glazed window to the front elevation, plain ceiling with centre light fitting and covings, power points.]]></Para> 
</feature>
<feature type="bathroom">
    <Heading><![CDATA[Bathroom]]></Heading> 
    <Para><![CDATA[Obscure double glazed window to the rear elevation, textured ceiling with centre light fitting and extractor fan, suite in white comprising of low level WC, wall mounted wash hand basin and walk in shower housing 'Triton T80' electric shower, co-ordinated tiled splashbacks.]]></Para> 
</feature>
</area>

А вот раздел моего шаблона, который его обрабатывает:

<xsl:for-each select="area">
    <li>
        <xsl:for-each select="feature">
            <li>
                <h5>
                    <xsl:value-of select="Heading"/>
                </h5>
                <xsl:value-of select="Para"/>
            </li>
        </xsl:for-each>
    </li>
</xsl:for-each>

И вот вывод:

Hall Communal gardens, pathway leading to PVCu double glazed communal front door to Communal Entrance Hall Plain ceiling, centre light fitting, fire door through to inner hallway, wood and glazed panelled front door to Inner Hall Plain ceiling with pendant light fitting and covings, security telephone, airing cupboard housing gas boiler serving domestic hot water and central heating, telephone point, storage cupboard housing gas and electric meters, wooden panelled doors off to all rooms. Lounge (Reception) 15' 6" x 10' 7" (4.72m x 3.23m) Window to the side and rear elevation, papered ceiling with pendant light fitting and covings, two double panelled radiators, power points, wall mounted security entry phone, TV aerial point. Kitchen 12' x 10' (3.66m x 3.05m) Double glazed window to the rear elevation, textured ceiling with strip lighting, range of base and wall units in Beech with brushed aluminium handles, co-ordinated working surfaces with inset stainless steel sink with mixer taps over, co-ordinated tiled splashbacks, gas and electric cooker points, large storage cupboard with shelving, power points. Balcony Views across the communal South facing garden, wrought iron balustrade. Bedroom One 13' 6" x 11' 5" (4.11m x 3.48m) Double glazed windows to the front and side elevations, papered ceiling with pendant light fittings and covings, single panelled radiator, power points, telephone point, security entry phone. Bedroom Two 11' 4" x 10' 1" (3.45m x 3.07m) Double glazed window to the front elevation, plain ceiling with centre light fitting and covings, power points. Bathroom Obscure double glazed window to the rear elevation, textured ceiling with centre light fitting and extractor fan, suite in white comprising of low level WC, wall mounted wash hand basin and walk in shower housing 'Triton T80' electric shower, co-ordinated tiled splashbacks.

Для справки вот весь XSLT: http://pastie.org/private/eq4gjvqoc1amg9ynyf6wzg

РЕДАКТИРОВАТЬ: И вот полный XML: http://pastie.org/private/upu3g9rstw8pilemtaq

Все остальное выводит нормально - чего мне не хватает в приведенном выше разделе?

Ответы [ 3 ]

5 голосов
/ 18 марта 2010

Вы не должны использовать xsl:for-each везде, кроме шаблонов:

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

    <xsl:template match="feature">
        <li>
            <h5>
                <xsl:value-of select="Heading"/>
            </h5>
            <xsl:value-of select="Para"/>
        </li>
    </xsl:template>

Я предполагаю, что ни одно из ваших правил сопоставления на самом деле не вызывается, поэтому вызывается шаблон по умолчанию (этот шаблон просто выводит весь текст, как вы описываете).

Читать Понимание того, как работают шаблоны по умолчанию для получения дополнительной информации.

Обновление

Основная причина проблемы, как обнаружил Стивен Денн, заключается в том, что ваш элемент area обернут в элемент text, поэтому он никогда не был выбран, в результате чего вызывался шаблон по умолчанию с выводом текстовых узлов .

1 голос
/ 18 марта 2010

Ваш элемент области находится внутри вашего текстового элемента.

0 голосов
/ 18 марта 2010

Ваша таблица стилей имеет шаблон, который соответствует свойству , но в вашем XML нет элемента property , с которым он мог бы соответствовать.

Итак, правила шаблонов по умолчанию совпадают, что создает текстовые узлы.

Если вы поменяете свой шаблон на совпадение со свойством:

<xsl:template match="property">

Для совпадения на корневом узле:

<xsl:template match="/">

Вы получите следующий вывод, который, я думаю, вам нужен:

<ul id="property" xmlns:php="http://php.net/xsl">
<li>
<ul class="pictures"></ul>
</li>
<li>
<address></address>
</li>
<li>
                Price: </li>
<li>
<li>
<h5>Hall</h5>Communal gardens, pathway leading to PVCu double glazed communal front door to</li>
<li>
<h5>Communal Entrance Hall</h5>Plain ceiling, centre light fitting, fire door through to inner hallway, wood and glazed panelled front door to</li>
<li>
<h5>Inner Hall</h5>Plain ceiling with pendant light fitting and covings, security telephone, airing cupboard housing gas boiler serving domestic hot water and central heating, telephone point, storage cupboard housing gas and electric meters, wooden panelled doors off to all rooms.</li>
<li>
<h5>Lounge (Reception)</h5>15' 6" x 10' 7" (4.72m x 3.23m) Window to the side and rear elevation, papered ceiling with pendant light fitting and covings, two double panelled radiators, power points, wall mounted security entry phone, TV aerial point.</li>
<li>
<h5>Kitchen</h5>12'  x 10'  (3.66m x 3.05m) Double glazed window to the rear elevation, textured ceiling with strip lighting, range of base and wall units in Beech with brushed aluminium handles, co-ordinated working surfaces with inset stainless steel sink with mixer taps over, co-ordinated tiled splashbacks, gas and electric cooker points, large storage cupboard with shelving, power points.</li>
<li>
<h5>Balcony</h5>Views across the communal South facing garden, wrought iron balustrade.</li>
<li>
<h5>Bedroom One</h5>13' 6" x 11' 5" (4.11m x 3.48m) Double glazed windows to the front and side elevations, papered ceiling with pendant light fittings and covings, single panelled radiator, power points, telephone point, security entry phone.</li>
<li>
<h5>Bedroom Two</h5>11' 4" x 10' 1" (3.45m x 3.07m) Double glazed window to the front elevation, plain ceiling with centre light fitting and covings, power points.</li>
<li>
<h5>Bathroom</h5>Obscure double glazed window to the rear elevation, textured ceiling with centre light fitting and extractor fan, suite in white comprising of low level WC, wall mounted wash hand basin and walk in shower housing 'Triton T80' electric shower, co-ordinated tiled splashbacks.</li>
</li>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...