Это было слишком долго, чтобы писать в комментариях, но в своем вопросе вы показываете, что делаете это ...
<xsl:attribute name="src" select="'{translate(@fixTest, '\','/')}'"/>
(Хотя, как вы показали, это действительно должно быть.
здесь, а не @fixTest
)
Но это означает, что у вас есть апострофы, вложенные в строку, ограниченную апострофами, что является синтаксической ошибкой.Итак, вы должны были написать это, чтобы сделать его синтаксически правильным.
<xsl:attribute name="src" select="'{translate(@fixTest, "\","/")}'"/>
Но это показало бы вам, в чем проблема.select
ожидает выражения.Используя разделение выражения апострофами, вы превратили его в строковый литерал, чтобы выражение не оценивалось.Но вам не нужно было использовать апострофы или фигурные скобки здесь.Вы должны были написать это ....
<xsl:attribute name="src" select="translate(., '\', '\')"/>
Или добавить префикс "file: ///" ....
<xsl:attribute name="src" select="concat('file:///',translate(., '\', '/'))"/>
Но есть даже легкоспособ, к которому применимы фигурные скобки (также известные как шаблоны значений атрибутов), а именно:
<fo:external-graphic src="file:///{translate(., '\', '/')}">
Здесь атрибут src
ожидает строку, авместо этого для вычисления выражения используются фигурные скобки.