Я застрял на том, что, по моему мнению, должно быть простым делом. Я искал вокруг, но не нашел решения. Надеюсь, вы мне поможете.
У меня есть элемент XML с атрибутом, который содержит экранированные элементы HTML:
<Booking>
<BookingComments Type="RAM" comment="RAM name fred<br/>Tel 09876554<br/>Email fred@bla.com" />
</Booking>
Что мне нужно получить, так это проанализировать HTML-элементы и контент из атрибута @comment, чтобы они содержали элемент
следующим образом:
<p>
RAM name fred<br/>Tel 09876554<br/>Email fred@bla.com
<p>
Вот мой XSLT:
<?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" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn" version="1.0">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3.org/TR/html4/loose.dtd" encoding="UTF-8" indent="yes" />
<xsl:template name="some-template">
<p>Some text</p>
<p>
<xsl:copy-of
select="/Booking/BookingComments[lower-case(@Type)='ram'][1]/@comment"/>
</p>
</xsl:template>
</xsl:stylesheet>
Я читал, что copy-of - это хороший способ восстановить экранированные элементы HTML обратно в соответствующие элементы. В данном конкретном случае, поскольку изначально это атрибут, копия также переводит его в атрибут. Итак, я получаю:
<p comment="RAM name fred<br/>Tel 09876554<br/>Email fred@bla.com"></p>
Чего я не хочу.
Если я использую apply-templates вместо copy-of, как в:
<p>
<xsl:apply-templates select="/Booking/BookingComments[lower-case(@Type)='ram'[1]/@comment"/>
</p>
Я получаю содержимое p просто как текст, а не восстановленные элементы HTML.
<p>RAM name fred<br/>Tel 09876554<br/>Email fred@bla.com</p>
Уверен, я что-то упустил. Буду очень признателен за любую помощь и советы!