2013-02-01 2 views
1

Я хотел бы сделать замену строки со значением из переменной, например:Можно ли использовать переменные в EXSLT str: replace?

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str" > 
<xsl:variable name="my-variable">bar</xsl:variable> 
<xsl:template match="text()"> 
    <xsl:value-of select="str:replace(. ,'foo', $my-variable)"/> 
</xsl:template> 
</xsl:stylesheet> 

Когда я запускаю это на файле, например,

<?xml version="1.0" encoding="utf-8"?> 
<root>foobar</root> 

I эту ошибку из xsltproc/LibXSLT

XPath error : Invalid type 
xmlXPathCompiledEval: evaluation failed 
runtime error: file C:/Users/Adam/Documents/WakhiLD/XSL/replace.xsl line 6 element value-of 
XPath evaluation returned no result. 

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

ответ

0

Просто используйте <xsl:variable name="my-variable" select="'bar'"/>, и он должен работать. В настоящее время вы создаете переменную типа результирующего дерева результатов, и похоже, что функция расширения не выполняет никакого преобразования в строку при передаче такого аргумента. Но простое создание строковой переменной, как показано выше, должно решить ее.

Если вам действительно нужно создать переменную как фрагмент дерева результатов, попробуйте преобразовать ее в строку явно, как в <xsl:value-of select="str:replace(. ,'foo', string($my-variable))"/>.

+0

Благодарим за быстрый и ясный ответ. Эта вещь фрагмента дерева XSLT 1.0 получила меня несколько раз раньше (с разной спецификой) ... –

Смежные вопросы