Отобрать все текстовые узлы подузла

cryo

Guest
Отобрать все текстовые узлы подузла

Есть у меня скажем, в xml-документе элемент <content> в котором находится еще произвольное дерево тэгов, текстовых узлов в перемешку и.т.д:

К примеру:
PHP:
<content>
   Контакты организации <br />
   Телефон: <telephone>123-45-67</telephone><br />
   Факс: <fax>123-45-67</fax><br />
</content>
То есть, другими словами, текстовая информация, некоторые места которой помечены специальными тэгами для понятия структуры. Теперь вот возникла необходимость отделять логическую структуру от окружающих данных. Нужно мне получить что-то похожее:

PHP:
<content>
   Контакты организации <br />
   Телефон: 123-45-67<br />
   Факс: 123-45-67<br />
</content>
и соответственно
PHP:
<content>
   <telephone>123-45-67</telephone>
   <fax>123-45-67</fax>
</content>
Как бы это осуществить?
 

Sababa

Guest
2 результирующих дерева за один проход? это только в XSLT2.


в первом это можно сделать только через 2 трансформации и вообщем весьма элементарно.

первый решается с помощью identity transformation c копирование текстовых нод и <br>

второй для <telephone>, <fax>
 

cryo

Guest
Да хоть за три прохода ;-) ;-) ;-) Надо просто отделять для разных типов документов, которые получаются из исходных данных. Пожалуйста, если не трудно, объясни поподробнее c примером каким образом это можно сделать. Не знаю я чего такое identity transformation :).
 

chameleon

Новичок
попробуй так:
PHP:
	<xsl:template match="/">
	<content>
		<text>
			<xsl:apply-templates select="content/text()"/>
		</text>
		<data>
			<xsl:apply-templates select="content/*"/>
		</data>
	</content>
	</xsl:template>
	<xsl:template match="text()">
		<xsl:value-of select="."/><br/>
	</xsl:template>
	<xsl:template match="node()">
		<xsl:copy>
			<xsl:value-of select="text()"/>
		</xsl:copy>
<br/>
	</xsl:template>
	<xsl:template match="br"/>
 

cryo

Guest
А есть какой-нить работающий пример на посмотреть? Тот что указан выше у меня не отрабатывается так как надо :(
 

chameleon

Новичок
я примеры перед постом проверять стараюсь. что конкретно не работает?
 

cryo

Guest
Извиняюсь! После небольшой правки напильником заработало :) Спасибо за поддержку :)

Единственное, надо бы мне задачу немного усложнить. Сижу вчитываюсь в книгу но пока быстро догнать не получается. Надо видимо про XSLT внимательно почитать, а не выбирая нужные странички :-D К сожалению время уже не терпит поэтому, если не трудно, подскажите как сделать следующее. Есть скажем какой-либо html

PHP:
<content>
 <p class="firstparagraph">
Компания <strong>КиноМакс</strong>, образованная в 1996 г., успешно осуществляет программу «Новое кино» на сегодняшний день уже в десяти городах Российской Федерации: <strong>Москва, Екатеринбург, Владимир, Ростов, Волгоград, Тюмень, Челябинск, Н. Тагил, Ханты-мансийск, Люберцы</strong>.  Целью программы является реконструкция старых и строительство новых кинотеатров в России и странах СНГ, внедрение высокотехнологичного проекционного оборудования в кинотеатры нового поколения.
</p>
<p class="formattedtext">
Все кинотеатры сети <a href="http://www.kinomax.ru">КиноМакс</a> оснащены кинопроекционной техникой западногерманской фирмы <a href="http://www.cine-project.de/Englisch/whoweare.html">Сine-Project</a>  и акустическим оборудованием <a href="http://www.dolby.co.uk">Dolby Digital</a> или <a href="http://www.sdds.com">Sony SDDS</a> ведущих мировых производителей, что позволяет зрителю не только воспринимать все возможные эффекты и нюансы современных кинофильмов, но и увидеть «старое» кино в новом качестве.
</p>
</content>
Так вот хотелось бы получить следующее:
PHP:
<p>
Компания <b>КиноМакс</и>, образованная в 1996 г., успешно осуществляет программу «Новое кино» на сегодняшний день уже в десяти городах Российской Федерации: <b>Москва, Екатеринбург, Владимир, Ростов, Волгоград, Тюмень, Челябинск, Н. Тагил, Ханты-мансийск, Люберцы</b>.  Целью программы является реконструкция старых и строительство новых кинотеатров в России и странах СНГ, внедрение высокотехнологичного проекционного оборудования в кинотеатры нового поколения.
</p>
<p>
Все кинотеатры сети <b>КиноМакс<b> оснащены кинопроекционной техникой западногерманской фирмы <b>Сine-Project</b>  и акустическим оборудованием <b>Dolby Digital</b> или <b>Sony SDDS</b> ведущих мировых производителей, что позволяет зрителю не только воспринимать все возможные эффекты и нюансы современных кинофильмов, но и увидеть «старое» кино в новом качестве.
</p>
В общем необходимо убить все тэги сохранив лишь <p>, <a> и <strong> поменять на <b>

Как бы это сделать попроще?
 

cryo

Guest
Не могу через preg_replace аднака :( Все xml+xslt завязано.
 
Сверху