В настоящее время я работаю над преобразованием XSLT, чтобы изменить структуру некоторых XML-документов в структуру, которая необходима внешнему поставщику услуг.Обработка HTML-объектов в элементе CDATA
Мой исходный документ содержит очень большой элемент с содержанием CDATA, как это:
<ABC>
<![CDATA[
Lorem ipsum dolor sit amet<br><br>
onsetetur sadipscing elitr, sed diam nonumy eirmod tempor<br>
At vero eos et äccusam et justo duo dolores et ea rebum
..."LARGE CONTENT"...
]]>
</ABC>
Обратите внимание, что текст содержит незакрытые <BR> элементов и множество различных HTML сущностей, как & AUML;
Желаемый результат в моем целевом документе должен выглядеть следующим образом:
<p>
Lorem ipsum dolor sit amet<br/><br/>
onsetetur sadipscing elitr, sed diam nonumy eirmod tempor<br/>
At vero eos et äccusam et justo duo dolores et ea rebum
..."LARGE CONTENT"...
</p>
Нет CDATA, в < бр > элементы были закрыты, так что я хорошо сформирован XML и HTML сущности были преобразованы в UTF символы, как в примере: & auml; -> ä
За исключением лиц, которые вы должны бежать на XML, как <,>, ",", &
Мой путь обработать это:
<xsl:template match="ABC">
<xsl:variable name="temp" select="replace(text(),'&auml;','ä')"/>
<!--[... many replacement rules for HTML entities...]-->
<xsl:value-of select="replace($temp,'<br>','<br/>')" disable-output-escaping="yes"/>
</xsl:template>
Этот шаблон выполняет свои требования , но есть много правил замены, и это, кажется, очень обстоятельные и неэффективные.
есть ли лучший способ обработать эту неэкранированный из HTML сущностей?
Какой XSLT-процессор вы используете? 'replace' предполагает, что это процессор XSLT 2.0, а коммерческие версии Saxon 9 (PE, EE) имеют функцию расширения' parse-html' http://www.saxonica.com/documentation/index.html#!functions/ saxon/parse-html, который должен выполнить задание (ну, он анализирует HTML-документ, поэтому вам может понадобиться использовать 'saxon: parse-html (concat ('< html>',., '& lt/html>'))'). –
Привет, Мартин. Я использую Oxygen XML IDE. Поэтому я предполагаю, что могу использовать Saxon 9 (PE, EE). Я попробую! Спасибо! – mailivres
saxon: parse-html() многое помогло! Должен ли я добавить это как ответ на этот вопрос? – mailivres