在XSLT中生成GUID

9

我需要使用XSLT和必要的C#生成GUID,有没有人知道如何最好地执行此操作?

这是为HTML元素生成唯一ID。


有一个短的XPath表达式可以解决这个问题,请参见:https://dev59.com/mWsz5IYBdhLWcg3wFT4f#64792196 - Dimitre Novatchev
4个回答

3
XSLT的generate-id函数返回一个字符串,用于唯一标识文档中的节点。请注意规范中的以下警告:

实现不必每次转换文档时都生成相同的标识符。不能保证生成的唯一标识符与源文档中指定的任何唯一标识符都不同。

但是,如果您只需要在输出中唯一标识每个元素,则使用generate-id足够了。

谢谢您的反馈,但是XSLT文件将在同一页上被多次调用,每次生成一个项目,因此我认为generate-id不会起作用。还有其他想法吗? - Burt
@Burt - 看看这个能否帮到你:https://dev59.com/hFLTa4cB1Zd3GeqPd9rx#4511181 - Wayne

1
C# 提供了一个方便的 Guid.NewGuid() 静态方法。我期望任何 XSLT 实现都会大量利用某些特定于系统的组件,因为 Guids 通常在一定程度上基于底层机器的硬件/MAC 地址等生成。

我知道Guid.NewGuid,但我该如何从XSLT中调用它? - Burt
2
一种方法是通过XSL扩展方法,例如在这里:http://www.pedautreppe.com/post/Calling-C-function-in-XSL.aspx。 - Joe

1

最终我只是使用了一个扩展方法,并将Guid.NewGuid()包装在一个静态方法中,然后从我的XSLT中调用它,一旦我弄清楚了扩展方法的工作原理,这就足够容易了。


0

使用C#,可以很容易地通过Script Blocks Using msxsl:script来实现。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="urn:my-scripts">
  <msxsl:script language="C#" implements-prefix="user">
  <![CDATA[
  public string getguid(){
     return Guid.NewGuid().ToString();
  }
  ]]>
  </msxsl:script>
  <xsl:template match="data">
    <Guid><xsl:value-of select="user:getguid()"/></Guid>
  </xsl:template>
</xsl:stylesheet>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接