我正在使用XSLT构建另一个XML。我希望某些字段具有哈希值而不是实际值。这意味着我应该知道数据何时发生变化,但由于某些安全原因,我不想知道数据。
<xsl:template name="sensitiveDataTemplate">
<xsl:param name="sensitiveData"></xsl:param>
<xsl:if test="$sensitiveData!=''">
<xsl:value-of select="'XXXXXX'"></xsl:value-of>
</xsl:if>
</xsl:template>
目前我只是用XXXXX替换数据,但我需要一些哈希值。
答案 0 :(得分:1)
要生成哈希值,您可以注册自定义函数。
请参阅official documentation,了解如何在xlst处理器中注册自定义php函数。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:template name="sensitiveDataTemplate">
<xsl:param name="sensitiveData"></xsl:param>
<xsl:if test="$sensitiveData!=''">
<xsl:value-of select="'php:some_hash_fun()'"></xsl:value-of>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
function some_hash_fun( )
{
return "XXXX"; // hash value
}
$xmldoc = DOMDocument::loadXML($xml);
$xsldoc = DOMDocument::loadXML($xsl);
$proc = new XSLTProcessor();
$proc->registerPHPFunctions(); // can be either a string (a function name) or an array of functions.
$proc->importStyleSheet($xsldoc);
echo $proc->transformToXML($xmldoc);
希望它有所帮助。
答案 1 :(得分:0)
我能够在一段时间内找到解决方案,这与上面给出的答案类似。
我只是调用PHP函数来使用SHA1散列。 XSL:
<xsl:template name="sensitiveDataTemplate">
<xsl:param name="sensitiveData"></xsl:param>
<xsl:if test="$sensitiveData!=''">
<xsl:value-of select="php:function('sha1', substring($sensitiveData,1, string-length($sensitiveData)))"></xsl:value-of>
</xsl:if>
</xsl:template>
PHP:
$proc->registerPHPFunctions('sha1');