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


Автор: Diesel Draft 10.8.2007, 12:21
Использую XSLTProcessor и  метод transformToDoc(). После этого вывожу через saveXML() или saveHtml(). На выходе у меня уже шаблон без формация. Как можно это отключить?

Автор: Golda 11.8.2007, 13:59
по идее, этот вопрос уже относится не к XSLTProcessor, а к DOMDocument объекту, который получился в результате transformToDoc()

Попробуйте использовать в XSL

Код

<xsl:output indent="no"/>


и присвоить явно соответствующее свойство документу

Код

$dom = $proc->transformToDoc($xml);
$dom->formatOutput = false;


Автор: Diesel Draft 11.8.2007, 21:52
Не помогло  smile 

Автор: Golda 12.8.2007, 08:46
Попробуйте, что у Вас выдает такой пример

test.xml
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<greeting>Hello, world!</greeting>


test.xsl
Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" version="4.0" encoding="UTF-8" indent="no" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
    <xsl:strip-space elements="*" />
    
    <xsl:template match="/">
    <html>
    <head>
        <title>Today's greeting</title>
    </head>
    <body>
        <p><xsl:value-of select="greeting"/></p>
    </body>
    </html>
    </xsl:template>
</xsl:stylesheet>


test.php
Код

<?php
$xml = domdocument::load('test.xml');
$xsl = domdocument::load('test.xsl');

$proc = new XsltProcessor();
$xsl = $proc->importStylesheet($xsl);
$dom = $proc->transformToDoc($xml);
$dom->formatOutput = false;

echo $dom->saveXML();
?>


можете также явно указать
Код

echo $dom->saveXML(null, LIBXML_NOBLANKS);


А еще проще, если использовать не transformToDoc(), а transformToXML(). Тогда достаточно указаний в XSL, никаких дополнительных настроек не нужно

Автор: Severyanin 13.8.2007, 07:16
А не могли бы Вы дать пару ссылок на информацию по процессору? А то я никак не могу найти удобный инструмент smile 

Автор: Golda 13.8.2007, 08:30
http://www.php.net/manual/en/ref.xsl.php  smile 

Автор: Severyanin 13.8.2007, 08:39
Спасибо, попробую разобраться smile

Добавлено через 3 минуты и 47 секунд
Эх, не то. Но все равно спасибо smile 

Автор: Diesel Draft 13.8.2007, 10:24
Через пол чеса попробую. 

Автор: Diesel Draft 13.8.2007, 12:56
Не помогло. Может то саблотрон поставить и под него перерубить? Не буде у меня проблем з хостингом?

Автор: Golda 13.8.2007, 13:25
Что именно не помогло? Вы попробовали вариант:

в <xsl:output> indent="no" 

<xsl:strip-space elements="*" />

в php

Код

echo $proc->transformToXML$xml);


?

Мой пример из пердыдущего поста выдает xml с лишними whitespaces или без?

Добавлено через 10 минут и 42 секунды
Я не пробовала ставить sablotron с PHP5. предполагаю, что могут быть проблемы, поскольку zend предлагает использовать XSLTProcessor и не поддерживает PHP5 + sablotron. Cоответстсвенно, даже если прямых нестыковок не будет, отлажена работа там не очень хорошо

Автор: Diesel Draft 13.8.2007, 13:41
без

Все вышесказанное пробовал

Автор: Golda 13.8.2007, 13:58
А, ну значит, я просто неправильно поняла, что Вы хотите. Я думала, Вам нужно получить вывод без лишних whitespaces, а Вы хотите как раз сохранить форматирование. Прошу прощения, что запутала дело. Тогда все с точностью до наоборот.

в <xsl:output> indent="yes" 

Если пробелы внутри тегов должны сохраняться, то вместо  

<xsl:strip-space> - убирайте, а если для большинства тегов он используется, то для тех, где нужно сохранить <xsl:preserve-space>. Для transformToXML() - все, а для transformToDoc() для получившегося DOMDocument указываем 

$dom->formatOutput = true;

Надеюсь, на этот раз я правильно поняла Вашу идею

Автор: Diesel Draft 13.8.2007, 14:07
ура-а-а-а-а-а  smile 

Спасибо. 

Как то даже смешно получилось smile Сделай так, а нет так, вышло? ну теперь наоборот все  smile 

С меня плюсик, заслужено

Автор: Golda 13.8.2007, 16:52
На здоровье  smile 

Бывает и так.  Еще раз прошу прощения за путаницу, ну да все хорошо, что хорошо кончается

Автор: Diesel Draft 13.8.2007, 16:54
Да ты извини. У меня з русским проблемы. Если б не гугл проверка я в такие еще минусы полез (смотри мою репу  smile ). Но з английским у меня еще хуже.

Автор: leshafirs 13.4.2011, 17:18
доброе время суток не стал создавать новый пост решил написать в этом так как проблема похожая=)

я пишу сайт преобразовываю xml с помощью xsl и обрабатываю все это в php 
Код
<?
    
    $xml_text = '<?xml version="1.0" encoding="utf-8"?>
        <docs>
            <doc>
                <name>lex</name>
            </doc>
            <doc>
                <name>wqewqe</name>
            </doc>
        </docs>
    ';

    $xml = new DOMDocument();
    $xml->loadXML($xml_text);
    $xml->formatOutput = true;
    $xml->preserveWhiteSpace = false;

    if(isset($_GET["q"])){
        header('Content-Type: application/xml; charset=utf-8');
        echo $xml->saveXML();
        die();
    }else{
        
    
    $xsl = new DOMDocument();
    $xsl->load('quotes.xsl');
    $xslt = new XsltProcessor();
    $xslt->importStylesheet($xsl);
    $result = $xslt->transformToDoc($xml);
    $result->formatOutput = true;
    $result->preserveWhiteSpace = false;
    header("Content-Type: text/html; charset=utf-8");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>

<body>

<?=$result->saveXML();?>

</body>
</html>

<? } ?>


quotes.xsl содержит 

Код
<?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:template match="/docs">
    <xsl:apply-templates select="doc" />
</xsl:template>

<xsl:template match="doc">
    <p style="padding:15px;border:1px solid #424242"><xsl:value-of select="name" /></p>
</xsl:template>

</xsl:stylesheet>


но на выходе я получаю где у меня идет echo $result->saveXML();
лишние 
Код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>

<body>

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<p style="padding:15px;border:1px solid #424242">lex</p>
<p style="padding:15px;border:1px solid #424242">wqewqe</p>

</body>
</html>



как убрать <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
 ??????

Автор: bars80080 13.4.2011, 18:57
Цитата(leshafirs @  13.4.2011,  17:18 Найти цитируемый пост)
не стал создавать новый пост решил написать в этом так как проблема похожая=)

то есть остальные обязаны читать целую страницу, чтобы в конце узнать, что проблема заключается в другом?

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