Я пытаюсь изменить ссылку внутри CDATA:Невозможно обработать элементы внутри CDATA
<paragraph>
<![CDATA[
<strong><a href="http://example.com/2014/12/08/article-title">Article Title</a></strong>Article Excerpt.
]]>
</paragraph>
Цель состоит в том, чтобы изменить пункт <p>
и в то же время, добавить дополнительные теги внутри ссылки. Например, желаемый результат может быть: (не все <paragraph>
есть ссылки в нем, некоторые содержат только текст)
<p>
<strong><a href="http://example.com/2014/12/08/article-title?tacking_id=12345" style="font-size:1.1em; color:#067ab4; line-height:100%">Article Title</a></strong>Article Excerpt.
</p>
Я попытался следующий код, но он не работает.
<xsl:template match="paragraph">
<xsl:copy-of select="@*"/>
<xsl:text disable-output-escaping="yes"><![CDATA[<p>]]></xsl:text>
<xsl:value-of select="." disable-output-escaping="yes"/>
<xsl:text disable-output-escaping="yes"><![CDATA[</p>]]></xsl:text>
</xsl:template>
<xsl:template match="text()[contains(.,'<a href="') and contains(.,'">')]">
<xsl:variable name="link" select="substring-before(substring-after(., '<a href="'), '">')"/>
<xsl:text disable-output-escaping="yes"><![CDATA[<a href="]]></xsl:text>
<xsl:value-of disable-output-escaping="yes" select="$link"/>
<xsl:text disable-output-escaping="yes"><![CDATA[&tracking_id=12345" ]]></xsl:text>
<xsl:value-of select="$link_style"/>
<xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text>
<xsl:apply-templates select="child::node()"/>
<xsl:text disable-output-escaping="yes"><![CDATA[</a>]]></xsl:text>
</xsl:template>
Там * есть * нет элементов в CDATA - вот что это за! Предположим, вы прочитали строку из SQL в xml-файл, и одно из этих полей содержало HTML со всеми его объектами &wtf;, неиспользуемыми тегами
и другим недопустимым XML. Вы помещаете его в раздел CData, чтобы XML не пытался его разобрать. – Mike