Генерация GUID в XSLT - PullRequest
       43

Генерация GUID в XSLT

8 голосов
/ 31 марта 2011

Мне нужно сгенерировать GUID с помощью XSLT и, если нужно, C #, кто-нибудь знает, как лучше всего это сделать?

Это генерировать уникальные идентификаторы для элементов HTML.

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

Функция XSLT generate-id возвращает строку, которая однозначно идентифицирует узел в документе.Обратите внимание на следующие предупреждения из спецификации:

Реализация не обязана генерировать одни и те же идентификаторы при каждом преобразовании документа.Нет гарантии, что сгенерированный уникальный идентификатор будет отличаться от любых уникальных идентификаторов, указанных в исходном документе.

Однако, если все, что вам нужно, - это уникальная идентификация каждого элемента в выходных данных, тогда generate-id достаточно.

1 голос
/ 31 марта 2011

В итоге я просто использовал метод расширения и обернул Guid.NewGuid () в статический метод, а затем вызвал его из моего XSLT. Это было достаточно просто, когда я понял, как работают методы расширения.

1 голос
/ 31 марта 2011

C # предоставляет удобный статический метод Guid.NewGuid (). Я ожидал бы, что любая реализация XSLT будет в значительной степени использовать некоторый системный компонент, так как направляющие часто генерируются частично на основе аппаратного / MAC-адреса / и т.д. на основной машине.

0 голосов
/ 07 ноября 2017

С помощью C # этого можно легко добиться с помощью блоков скриптов с помощью 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>
...