Я бы хотел проанализировать HTML-код внутри блока CDATA для тегов <p>
и вывести каждый из них в отдельную строку таблицы.Однако я не могу понять это, и мне было интересно, сможет ли кто-нибудь мне помочь?
Я пытаюсь разобрать HTML, но не могу понять, как я могу разобрать его, а что нет.просто расцените это как символьные данные.Я почти уверен, что не могу сделать это с XSL 1.0, я могу использовать 2.0 при необходимости.
XML
<XML_FILE>
<NOTE>
<TEXT TITLE="TEST">
<![CDATA[<p>first p tag and <strong>bold</strong></p><p>second p tag and <u>underline</u></p>]]>
</TEXT>
</NOTE>
</XML_FILE>
XSL
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="NOTE">
<div class="tableWrapper">
<table class="body">
<xsl:apply-templates select="TEXT"/>
</table>
</div>
</xsl:template>
<xsl:template match="TEXT">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Выход
<div class="tableWrapper">
<table class="body"><p>first p tag and <strong>bold</strong></p><p>second p tag and <u>underline</u></p></table>
</div>
Желаемый выход
<div class="tableWrapper">
<table class="body">
<tr><td><p>first p tag and <strong>bold</strong></p></td></tr>
<tr><td><p>second p tag and <u>underline</u></p></td></tr>
</table>
</div>
Окончательная таблица стилей, которая обеспечивает желаемый результат
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:strip-space elements="*"/>
<xsl:template match="XML_FILE">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="NOTE">
<div class="tableWrapper">
<table class="body">
<xsl:apply-templates select="parse-xml-fragment(TEXT)/node()"/>
</table>
</div>
</xsl:template>
<xsl:template match="p">
<tr>
<td>
<xsl:next-match/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>