我试图找到(在重新发明之前)一个“简单”的XSLT模板,该模板将获取任何xml文档,在该XML中查找所有文本元素并替换所有“with”。我正在从SQL执行“SELECT ... FOR XML”,然后“保存”该XML以便以后插入到SQL中。在完成SELECT FOR XML之后,我想在进一步处理它之前在该文本中创建所有''。这样,在集成到其他XML(可能不需要这样的替换)之后,文本将已经是“SQL安全”。
非常感谢任何关于如何最好地实现这一目标的建议。
答案 0 :(得分:3)
这是XSLT 2中的一种方式
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="translate(.,'"','''')"/>
</xsl:template>
</xsl:stylesheet>
在XSLT1中执行它有点问题,因为很难获得包含单个撇号的文字,因此您必须求助于变量:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="apos">'</xsl:variable>
<xsl:template match="text()">
<xsl:value-of select="translate(.,'"',$apos)"/>
</xsl:template>
</xsl:stylesheet>