Можно ли использовать функцию sprintf () в XSLT? - PullRequest
3 голосов
/ 18 августа 2010

Я хотел бы сделать что-то вроде "Hello% s" и иметь "World" в другой переменной.

Конечно, я мог бы выполнить этот простой случай, используя замену строк, но, если возможно, я бы хотел, чтобы все функции sprintf (), такие как переупорядочение аргументов, были бы очень сложными для меня.

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

XML / XSLT-эквивалент Hello World это :

У нас есть этот документ XML:

<t>Hello <rep/>!</t>

и используйте это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="rep">
  <xsl:value-of select="'World'"/>
 </xsl:template>
</xsl:stylesheet>

Требуемый результат получен :

<t>Hello World!</t>

Примечание :

  1. Мы используем и переопределяем правило идентификации . Это самый фундаментальный шаблон проектирования XSLT.

  2. Мы можем встраивать постоянное содержимое во множество различных заменяющих элементов, и, таким образом, имеет метод "заполнения пробелов" .

  3. Используя эту технику, можно достичь полного разделения между контентом и логикой обработки . Код XSLT не знает, какой исходный XML-документ он обрабатывает (URL документа можно даже передать в качестве параметра). Одна и та же таблица стилей XSLT может использоваться для любого заполненного бланкового документа, а любой заполненный бланковый документ может обрабатываться различными таблицами стилей XSLT. Такое разделение обеспечивает максимальную гибкость и ремонтопригодность.

  4. Если вы хотите, чтобы был только текст, это можно сделать легко - например, используя <xsl:output method="text"/>

1 голос
/ 18 августа 2010

Если вы выполняете преобразование внутри языка, который поддерживает расширение XSLT с помощью объекта расширения (например, одного из языков .NET или PHP); затем вы можете просто создать для этого функцию и вызывать ее из XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...