我使用XSLT来提取一些HTML内容包含特殊字符(如
从XML文件。 所述内容被存储在<content>
节点。 我已经定义了最特殊字符是这样的: <!ENTITY nbsp " ">
,所以这个表达式工作完全正常:
<xsl:copy-of select="content" disable-output-escaping="yes"/>
现在,我想补充target="_blank"
到的内容中发现的每一个环节。 这是我想出了解决方案:
<xsl:template match="a" mode="html">
<a>
<xsl:attribute name="href"><xsl:value-of select="@*"/></xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:apply-templates select="text()|* "/>
</a>
</xsl:template>
和而不是“复制的”元素我用这个:
<xsl:apply-templates select="content" mode="html"/>
现在,所有这些特殊字符(和NBSP太)从输出消失。 如何让他们? 好像disable-output-escaping="yes"
没有帮助在这里。
好吧,我使用的PHP XSLTProcessor中类。 该disable-output-escaping
属性并没有给出一个错误实际上,但是当我删除它,输出是一样的,所有的NBSP的,所以这并不重要。
UPD。 随着XSL模板我以前所示,我输入样本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page SYSTEM "html-entities.xsl">
<content>There is a non-breaking <a href="http://localhost">space</a> inside.</content>
HTML-entities.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY nbsp " ">
PHP代码:
$xp = new XSLTProcessor();
$xsl = new DOMDocument();
$xsl->load($xsl_filename);
$xp->importStylesheet($xsl);
$xml_doc = new DOMDocument();
$xml_doc->resolveExternals = true;
$xml_doc->load($xml_filename);
$html = $xp->transformToXML($xml_doc);
我的电流输出:
There is anon-breaking <a href="http://localhost" target="_blank">space</a> inside.
我需要的输出:
There is a non-breaking <a href="http://localhost" target="_blank">space</a> inside.