xsl:text в php5

Kirill

Новичок
xsl:text в php5

есть шаблон взятый с xmlhack.ru:

<xsl:template name="for-level">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<xsl:if test="$i &lt; $n">
<xsl:text>-</xsl:text>
<xsl:call-template name="for-level">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

На php 4.4 работает на ура, на php 5 - падает php.
Вяснил что это из-за <xsl:text>-</xsl:text>
Почему падает и как лучше заменить? Вариант без <xsl:text> не очень нравится, ибо <xsl:if test="$i &lt; $n">-<xsl:call-template name="for-level"> как-то некрасиво смотрится
 

denver

?>Скриптер
Kirill
У меня всё ок.
Убери все лишнее из XML и PHP и кидай оба тоже сюда.

-~{}~ 15.04.07 15:59:

И вообще, что значит php падает? Пишет ошибку (какую?) или действительно отваливается с connection error?
 

Kirill

Новичок
падает - выдает белый экран без чего-либо. Даже если до этого в скрипте наставить парочку echo - все равно будет белый экран. Это на серваке у хостера. Хотя display_errors=1
 

Kirill

Новичок
xsl:
PHP:
<?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 method="html" indent="yes" encoding="UTF-8"/>
<xsl:template match="admin">
	<xsl:apply-templates select="content"/>
	<xsl:apply-templates select="errors"/>
	<xsl:apply-templates select="messages"/>
	<xsl:apply-templates select="form"/>
</xsl:template>

<xsl:template match="content">
	<xsl:value-of select="text()" disable-output-escaping="yes" /><br/><br/>
</xsl:template>

<xsl:template match="errors">
	<xsl:for-each select="error">
		<center><b style="color:red;"><xsl:value-of select="text()"/></b></center>
	</xsl:for-each>
</xsl:template>

<xsl:template match="messages">
	<xsl:for-each select="message">
		<center><b><xsl:value-of select="text()"/></b></center>
	</xsl:for-each>
</xsl:template>

<xsl:template match="form">
	<SCRIPT TYPE="text/javascript">
		var check_langs = new Array();
		var fields = new Array();
		var f_i=0;
		<xsl:for-each select="visible/*"><xsl:call-template name="jsarr"/></xsl:for-each>
		<xsl:for-each select="hide/*"><xsl:call-template name="jsarr"/></xsl:for-each>
		<xsl:call-template name="jslang"/>
	</SCRIPT>
	<form action="{@action}" method="POST" enctype="multipart/form-data" onsubmit="return CheckFields(this);">
		<input type="hidden" name="posted" value="1"/>
		<xsl:apply-templates select="visible"/>
		<xsl:apply-templates select="hide"/>
		<input type="submit" value="{//langs/@add}"/>
		<input type="reset" value="{//langs/@reset}"/>
		<br/>
		<xsl:value-of select="//langs/@after_add"/><br/>
		<input type="radio" name="after" value="0">
			<xsl:if test="//@after='0'"><xsl:attribute name="checked"/></xsl:if>
		</input>
		<xsl:value-of select="//langs/@return_list"/>
		<br/>
		<input type="radio" name="after" value="1">
			<xsl:if test="//@after='1'"><xsl:attribute name="checked"/></xsl:if>
		</input>
		<xsl:value-of select="//langs/@return_add"/>
	</form>
	<br/>
	<xsl:value-of select="//langs/@binding"/>
</xsl:template>

<xsl:template name="jslang">
	check_langs["js_error"] = '<xsl:value-of select="//langs/@js_error"/>';
	check_langs["js_binding"] = '<xsl:value-of select="//langs/@js_binding"/>';
	check_langs["js_int"] = '<xsl:value-of select="//langs/@js_int"/>';
</xsl:template>

<xsl:template name="jsarr">
	fields[f_i] = new Array("<xsl:value-of select="@name"/>", "<xsl:value-of select="@field"/>", "<xsl:value-of select="@c_type"/>", "<xsl:value-of select="@binding"/>", "<xsl:value-of select="@length"/>");
	f_i++;
</xsl:template>

<xsl:template match="visible">
	<table border="1" cellspacing="0" cellpadding="0">
		<xsl:apply-templates/>
	</table>
</xsl:template>

<xsl:template match="hide">
	<a href="#" onclick="DisplHideAF('form_add');return false;"><xsl:value-of select="//langs/@add_disp"/></a><br/>
	<div id="form_add">
		<xsl:if test="@no_hide=0">
			<xsl:attribute name="style">display:none;</xsl:attribute>
		</xsl:if>	
		<table border="1" cellspacing="0" cellpadding="0">
			<xsl:apply-templates/>
		</table>
	</div>
</xsl:template>

<xsl:template match="switch">
	<xsl:choose>
		<xsl:when test="@radio=1"><xsl:call-template name="r_switch"/></xsl:when>
		<xsl:otherwise><xsl:call-template name="l_switch"/></xsl:otherwise>
	</xsl:choose>
</xsl:template>

<xsl:template name="l_switch">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td>
			<select name="{@field}">
				<xsl:for-each select="case">
					<option value="{@value}">
						<xsl:if test="@selected=1"><xsl:attribute name="selected" /></xsl:if>
						<xsl:choose>
							<xsl:when test="@level > 0">
								<xsl:call-template name="for-level">
									<xsl:with-param name="n" select="@level"/>
								</xsl:call-template>
								<xsl:value-of select="text()"/>
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="text()"/>
							</xsl:otherwise>
						</xsl:choose>
					</option>
				</xsl:for-each>
			</select>
		</td>
	</tr>	
</xsl:template>

<xsl:template name="for-level">
	<xsl:param name="i" select="0"/>
	<xsl:param name="n"/>
	<xsl:if test="$i &lt; $n">
		<xsl:text>-</xsl:text>
		<xsl:call-template name="for-level">
			<xsl:with-param name="i" select="$i + 1"/>
			<xsl:with-param name="n" select="$n"/>
		</xsl:call-template>
	</xsl:if>
</xsl:template>

<xsl:template name="r_switch">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td>			
			<xsl:for-each select="case">
				<input type="radio" name="{../@field}" value="{@value}">
					<xsl:if test="@selected=1"><xsl:attribute name="checked" /></xsl:if>
					<xsl:value-of select="text()"/>
				</input>
			</xsl:for-each>
		</td>
	</tr>
</xsl:template>

<xsl:template match="text">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td><input type="text" name="{@field}" maxlength="{@length}" value="{text()}" /></td>
	</tr>
</xsl:template>

<xsl:template match="password">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td><input type="password" name="{@field}" maxlength="{@length}" /></td>
	</tr>
</xsl:template>

<xsl:template match="textarea">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td><textarea name="{@field}" maxlength="{@length}"><xsl:value-of select="text()"/></textarea></td>
	</tr>
</xsl:template>

<xsl:template match="file">
	<tr>
		<td>
			<xsl:value-of select="@name"/>
			<xsl:if test="@binding=1"><SUP>*</SUP></xsl:if>
		</td>
		<td><input type="file" name="{@field}" /></td>
	</tr>
</xsl:template>

</xsl:stylesheet>
xml:

PHP:
<?xml version="1.0" encoding="UTF-8"?>
<admin refresh="/admin/index.php?id=3&amp;act=1" after="0"><langs js_error="Ошибка в поле" js_binding="Не заполнено данное поле." js_int="В значении поля допускаются только числа." add="Добавить" reset="Очистить" add_disp="Доп. поля (скрыть/показать)" binding="* - Поля, обязательные для заполнения." after_add="После добавления:" return_list="Вернуться к списку" return_add="Вернуться к добавлению" refresh="Обновить страницу"></langs><form action="/admin/index.php?id=3&amp;act=1"><visible><text field="id2" name="id2" c_type="int" binding="1" length="11"></text><text field="name" name="Имя" c_type="char" binding="0" length="50"></text><switch field="id_class" name="id class" c_type="int" binding="0" length="12"><case value="0" selected="0">нет</case><case value="6" selected="0">EXGAAddMod</case><case value="4" selected="0">EXGAdminMod</case><case value="3" selected="0">EXGAdminPages</case><case value="8" selected="0">EXGAdmnGroups</case><case value="10" selected="0">EXGAdmnUsers</case><case value="7" selected="0">EXGAPageNames</case><case value="13" selected="0">EXGAPContents</case><case value="11" selected="0">EXGAUPassCh</case><case value="9" selected="0">EXGGroupPages</case><case value="1" selected="1">EXGMain</case><case value="2" selected="0">EXGTemp</case><case value="12" selected="0">EXGUserPages</case></switch><switch field="id_page" name="id page" c_type="int" binding="0" length="12"><case value="0" selected="0">нет</case><case value="1" selected="1" level="0">1</case><case value="37" selected="0" level="0">37</case><case value="38" selected="0" level="1">38</case><case value="39" selected="0" level="2">39</case><case value="40" selected="0" level="1">40</case><case value="41" selected="0" level="2">41</case><case value="42" selected="0" level="2">42</case><case value="33" selected="0" level="0">33</case><case value="9" selected="0" level="1">9</case><case value="36" selected="0" level="2">36</case><case value="43" selected="0" level="2">43</case><case value="34" selected="0" level="1">34</case><case value="35" selected="0" level="2">35</case><case value="6" selected="0" level="0">6</case><case value="3" selected="0" level="0">3</case><case value="4" selected="0" level="1">4</case><case value="5" selected="0" level="2">5</case></switch><switch field="case_l" name="Доступно?" c_type="int" binding="0" length="1" radio="1"><case value="0" selected="0">нет</case><case value="1" selected="1">да</case></switch><file field="file" name="unknow" c_type="file" binding="0"></file></visible><hide no_hide="0"><textarea field="full_text" name="unknow" c_type="char" binding="0" length="65535"></textarea></hide></form></admin>
Преобразовывается все при помощи класса:

PHP:
<?php
class EXGXslt{
	var $proc;
	
	function EXGXslt(){
		$this->proc = new XSLTProcessor();
	}
	
	function Transform($xml_data, $tpl_path){
		$xml = new DOMDocument;
		$xml->loadXML($xml_data);
		
		$xsl = new DOMDocument;
		$xsl->load($tpl_path);
		
		$this->proc->importStyleSheet($xsl);
		
	    $result = $this->proc->transformToXML($xml);
    
		if ($result)
		    return $result;
		else {
		    print ("There was an error that occurred in the XSL transformation in file ".$tpl_path."...\n");
		    exit;
		}					
	}
}
?>
-~{}~ 15.04.07 21:10:

если есть <xsl:text>-</xsl:text> - падает. Если нету - все работает ОК.
 

Kirill

Новичок
забей, я уберу <xsl:text>-</xsl:text> и буду радоваться жизни

-~{}~ 15.04.07 21:14:

в xsl форум смайлики воткнул вместо некоторых тегов :)
 

dark-demon

d(^-^)b
Kirill, это называется "Убери все лишнее из XML и PHP и кидай оба тоже сюда."?
 

slach

Новичок
php как подключен??
версия php5 какая?
версия libxml2 какая?

у меня xsl:text нормально работает
 
Сверху