Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > XSLTProcessor и html entites


Автор: RasierKlinge 31.1.2008, 21:04
есть xml
Код

<?xml version="1.0" encoding="Windows-1251" ?>
<!DOCTYPE document [
<!ENTITY nbsp "& #160;">
<!ENTITY copy "& #169;">
<!ENTITY laquo "& #171;">
<!ENTITY raquo "& #187;">
<!ENTITY mdash "& #8212;"> ]>
<document id="87" parentID="0" href="/about/" >
    <name>О нас</name>
    <title>О нас</title>
    <content>
        <text>
            <h1>О&mdash;Компании</h1>
            <p>Ретроконверсия национального наследия развивает рекламоноситель, признавая определенные рыночные тенденции.
            Медиа вырождена. Стимулирование сбыта, следовательно, синхронизирует охват аудитории, размещаясь во
всех медиа. Баинг и селлинг абстрактен.</p>
        </text>
    </content>
</document>


xsl:
Код

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

<!DOCTYPE xsl:stylesheet SYSTEM "character-entities.dtd">

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xml">
    <xsl:import href="text.xsl" />
    <xsl:import href="errors.xsl" />
    <xsl:import href="useful.xsl" />
    <xsl:import href="forms.xsl" />

    <xsl:include href="layout.xsl" />

    <xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes" omit-xml-declaration="yes" encoding="windows-1251" />

    <xsl:variable name="content" select="/document/content" />

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

    <xsl:template match="document">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <xsl:call-template name="HTMLHead" />
            <xsl:apply-templates select="." mode="body" />
        </html>
    </xsl:template>

    <xsl:template match="clear" name="clear">
        <div class="clear"><xsl:call-template name="emptySpan" /></div>
    </xsl:template>

    <xsl:template name="HTMLHead">
        <head>
            <xsl:call-template name="HTMLTitle" />
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
            <link rel="stylesheet" href="/css/layout.css" type="text/css" />
        </head>
    </xsl:template>

    <xsl:template name="HTMLTitle">
        <title><xsl:value-of select="document/name" /></title>
    </xsl:template>

    <xsl:template match="*" mode="body">
        <body>
            <xsl:apply-templates select="$content/text" />
        </body>
    </xsl:template>

</xsl:stylesheet>


на php трансформирую xml
Код

            $xml= new DOMDocument('1.0','Windows-1251');
            $xml->loadXML($sXML);            
            
            $xsl = new DOMDocument();
            $xsl->resolveExternals = TRUE;
            $xsl->substituteEntities = TRUE;
            $xsl->load( $sXslPath);            
            
            $xslProc = new XSLTProcessor();
            $xslProc->importStylesheet($xsl);
            
            $dom = $xslProc->transformToXML( $xml );
            if ( $dom ){
                return $dom;
            }


на всякий случай фот файл с энтити
Код

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

<!ENTITY nbsp "& #160;">
<!ENTITY copy "& #169;">
<!ENTITY laquo "& #171;">
<!ENTITY raquo "& #187;">
<!ENTITY mdash "& #8212;">

(Энтити пишу без пробелов, просто иначе тут не написать, они заменяються на сиволы)

На выходе не появляеться ни одной энтити. Прсто вместо 
О&mdash;Компании пишет
ОКомпании

файл с описаними сущностей в xsl подключается нормально (если его удалить выдвает ошибку),
В xml до трансформации они отображаються правельно,
ошибок не выводится

голову уже сломала, никак не пойму чего нехватает...

Автор: RasierKlinge 1.2.2008, 17:39
вопрос решился
Энтити в xml нужно объявлять так же как и в xsl
Код

        <!DOCTYPE text SYSTEM "symbols.ent">


Код

        $xml = new DOMDocument('1.0','Windows-1251');
        $xml->resolveExternals = TRUE;
        $xml->substituteEntities = TRUE;


просто невнимтельность...
 smile 

Автор: nolan 24.3.2008, 00:38
Леди! Решаю аналогичную проблему,  но получаю ошибку:

Warning: DOMDocument::load() [function.DOMDocument-load]: Entity 'mdash' not defined in file:///C%3A/Inetpub/phproot/xml/index.xml, line: 44 in C:\Inetpub\phproot\index.php on line 18

Вроде все сделал по вашему мануалу, но не выходит каменный цветок. smile

Если не трудно, стукнитесь в аську  313-657-507.

Спасибо.

Автор: awers 25.3.2008, 01:35
nolan, одна тема - один вопрос... создай новую - обсудим

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