как правильно вставить BR в текст

MoonCat

Старожил PHPCluba
как правильно вставить BR в текст

есть такая задачка ....
в тэге FornName есть атрибут TextNote, содержащий какой то пояснющий текст. В нем могут быть заданы тэги BR для перехода на новую строку. Как правильно написать XSL для такого случая. Я уже всякие варианты пербрал , много примеров пересмотрел но что то не выходит :(
спасибо за все варианты ;)
 

slach

Новичок
<xsl:template match="a|font|br|ul|li|ol|table|tr|td|hr|form|input|textarea|select|option|span|embed">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

<!-- here come the tags which don't have attributes...-->
<xsl:template match="i|b|h1|h2|h3|h4|h5|h6|pre|code|p|sub|sup|br">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>


<!-- we make a seperate image thingie because we want border="0" everytime, unless specified otherwise-->
<xsl:template match="img">
<xsl:copy>
<xsl:attribute name="border">0</xsl:attribute>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

all HTML tags from input XML document, will be copy to ouput XML document
 

MoonCat

Старожил PHPCluba
что то я торможу :confused:

вот кусок XML

<FormField FieldControlType = "Text"
FieldValue = "ДА: Могу я поговорить с человеком отвечающим за покраску? <br>НЕТ : С кем из руководства я могу поговорить?">
</FormField>

вот XSL

<xsl:when test='@FieldControlType = "Text"'>
<tr>
<td colspan="2">
<b>
<xsl:value-of select="@FieldValue"/>
</b>
</td>
</tr>
</xsl:when>

как эти template прикрутить что бы они "пропускали" <br> в атрибуте FieldValue?

прошу прощения за свою тупость но пока для меня это дело новое :p
 

Sababa

Guest
тебе поможет так называемое "идентичное преобразование". Его можно определит явно, но можно и не определять вообще, так как эти шаблоны являются встроенными

чуть перепишем xml:

<FormField FieldControlType = "Text">
ДА: Могу я поговорить с человеком отвечающим за покраску? <br>НЕТ : С кем из руководства я могу поговорить?
</FormField>

xsl:

<xsl:when test='@FieldControlType = "Text"'>
<tr>
<td colspan="2">
<b>
<xsl:apply-templates/>
</b>
</td>
</tr>
</xsl:when>

при этом можно гибко указать, что копировать, а что нет:

<xsl:template match="para"/>

если бы у тебя в тексте был бы тег para, то он бы просто удалился, а все остальное скопируется нормально:

если надо просто тупо скопировать все, то проще некуда:

<xsl:copy-of select="node()"/>

вместо apply-templates

Надеюсь исчерпывающе :)
 

MoonCat

Старожил PHPCluba
да , спасибо , теперь понятно :) Я как то так и предполагал, что внутри значения атрибутов какие то тэги "не прокатят" :( Однако засада в том , что XML я уже получаю от чужой проги, а там все данные идут через атрибуты :mad:

Можно ли ОДНОЗНАЧНО сказать , что в атрибутах тэги не возможно правильно обработать ? :confused:
 

Sababa

Guest
аттрибуты не могу содержать xml, поэтомы все символы типа: <, >, & будут заменены на сущности, а это уже сам понимаешь не xml и обрабатывать его соответствующим образом нельзя.

как вариант можно после преобразования заменить все сущности обратно, но это imho некрасиво, ищи другие пути
 

MoonCat

Старожил PHPCluba
спасибо , теперь вроде как все стало понятно , а то были только догадки :)
спасибо ;)
 
Сверху