LINUX.ORG.RU

распарсить HTML в CDATA

 cdata, ,


0

1

Есть XML, условно такой

<testcase name="Foo">
	<summary><![CDATA[This testcase verifies FOO<br>It's very important]]></summary>
</testcase>

надо его странслировать в такой

<row>
    <entry>
	<tp>Summary</tp>
    </entry>
    <entry>
        <tp>This testcase verifies FOO</tp>
        <tp>It's very important</tp>
    </entry>
</row>

Чисто средствами XSLT этого сделать нельзя, насколько я понимаю, т.к. в CDATA не XML-структура? И даже если делать в 2 прохода:

<xsl:template match="testcase">
    <xsl:copy-of select="@*"/>
    <summary><xsl:value-of select="." disable-output-escaping="yes" /></summary>
<xsl:template>

v v v

<testcase name="Foo">
	<summary>This testcase verifies FOO<br>It's very important</summary>
</testcase>

то даже из этого не выцепить, т.к. <br> != <br/> - не валидный пустой элемент.

Как тогда лучше выкрутиться?

Как тогда лучше выкрутиться?

Ну может, хотя бы html валидный внутрь запихивать?

const86 ★★★★★
()
Ответ на: комментарий от const86

Может, да только не я запихиваю. Тулза внешняя

marvin_yorke ★★★
() автор топика

Если HTML там почти валидный, то можно поизвращаться с функцией replace().

Я бы пропустил XML через «препроцессор» (например, использующий libxml2): XML обрабатывал бы XML-парсером, контент в cdata обрабатывал бы HTML-парсером; полученное в результате обработки HTML дерево добавлял бы в XML-дерево.

sjinks ★★★
()

Бить по пальцам за такой «XML».

Можно попробовать написать/использовать готовые функции обработки строк или взять XSLT2 (что может быть непросто), где они есть.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.