通用XSLT搜索和替换模板

时间:2013-12-31 22:37:52

标签: sql xslt

我试图找到(在重新发明之前)一个“简单”的XSLT模板,该模板将获取任何xml文档,在该XML中查找所有文本元素并替换所有“with”。我正在从SQL执行“SELECT ... FOR XML”,然后“保存”该XML以便以后插入到SQL中。在完成SELECT FOR XML之后,我想在进一步处理它之前在该文本中创建所有''。这样,在集成到其他XML(可能不需要这样的替换)之后,文本将已经是“SQL安全”。

非常感谢任何关于如何最好地实现这一目标的建议。

1 个答案:

答案 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(.,'&quot;','''')"/>
  </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(.,'&quot;',$apos)"/>
  </xsl:template>
</xsl:stylesheet>