Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Выводится всё тело DOM


Автор: ossorian 7.2.2014, 08:01
Выручайте!
Вот такой простой код XSLT:

Код

<xsl:template match="structure[@id=219]">
     И внутри код отображения нужной информации...
</xslt:template>


Выдаёт и нужную информацию и повторяет тело самого XML документа.
Уже всю голову сломал - как это возможно, почему? Ни одно инструкции для этого не вижу... Похожий файл, с которого всё копировал весь  просмотрел, но логики не вижу - нет там никакой доп. инструкции, чтобы не выводить этот текст.  smile 

Автор: Bulat 7.2.2014, 22:33
ossorian, а xml посмотреть можно?

Автор: ossorian 10.2.2014, 06:29
Цитата(Bulat @ 7.2.2014,  22:33)
ossorian, а xml посмотреть можно?

Здравствуйте, он громоздкий - потому вынес сюда: 
http://akfa.ru/test/left_menu.xml
Формируется через Host CMS

А вот XSLT такой:

 
Код

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
    
    <!-- ЛевоеМеню -->
<!--<xsl:apply-templates select="structure[@id=219]"/>-->
<xsl:template match="structure[@id=219]">
    <div id="content_menu">
        
        <xsl:variable name="current_structure_id" select="./current_structure_id"/>
        <h1><xsl:value-of select="./name" /></h1>
    
        <ul id="left_page_menu">
        <xsl:for-each select="/document/structure[@id=219]/structure[show=1]">
            <xsl:variable name="link" select="./link"/>
            <xsl:variable name="link_id" select="@id"/>
            <li>
                <xsl:choose>
                    <xsl:when test="$current_structure_id=$link_id">
                        <span style="color:black;"><xsl:value-of disable-output-escaping="yes"  select="./name" /></span>
                    </xsl:when>
                    <xsl:otherwise>
                        <a href="{$link}"><xsl:value-of select="./name" /></a>
                    </xsl:otherwise>
                </xsl:choose>
                
                <xsl:choose>
                    <xsl:when test="structure[show=1]">
                    <ul>
                        <xsl:for-each select="./structure[show=1]">
                        <li>
                            <xsl:variable name="link2" select="./link"/>
                            <xsl:variable name="link_id2" select="@id"/>
                            <xsl:choose>
                                <xsl:when test="$current_structure_id=$link_id2">
                                    <span style="color:black;"><xsl:value-of select="./name" /></span>
                                </xsl:when>
                                <xsl:otherwise>
                                    <a href="{$link2}"><xsl:value-of disable-output-escaping="yes"  select="./name" /></a>
                                </xsl:otherwise>
                            </xsl:choose>
                        </li>    
                        </xsl:for-each>
                    </ul>
                    </xsl:when>
                </xsl:choose>
            </li>
        </xsl:for-each>
        </ul>
        
    </div>
</xsl:template>
    
</xsl:stylesheet>


Результат (printscreen) - тут: user posted image

Т.е. выводится как раз то самое меню, которое нужно, но одновременно с этим выводится и весь DOM - документ. По каким причинам - никак не могу понять  smile . Я уже готов даже денежно помочь  smile 

Автор: diadiavova 11.2.2014, 00:36
Цитата(ossorian @  10.2.2014,  07:29 Найти цитируемый пост)
А вот XSLT такой:

Это полная версия? Если да, то возможно проблема в том, что не обозначено место откуда надо начинать разбор. Попробуй добавить такой шаблон
Код

<xsl:template match="/">
    <xsl:apply-templates select="//structure[@id=219]"/>
</xsl:template>

Автор: ossorian 11.2.2014, 02:20
Цитата(diadiavova @  11.2.2014,  00:36 Найти цитируемый пост)
Попробуй добавить такой шаблон

Доктор Зло, вы гений!  smile 
Правда чуть подправил - "/structure[@id=219]" - с одним слэшем - тогда текст исчез. С двумя отображался, но в меньшем количестве.
Слетело определение текущего элемента - но это уже мелочи, буду править напильником.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)