Допустим, у меня есть следующий XML-ввод:
<?xml version="1.0"?>
<root>
<urls>
<url>http://foo</url>
<url>http://bar</url>
</urls>
<resources lang="en-US">
<resourceString id='url-fmt'>See URL: {0}</resourceString>
</resources>
</root>
Я хотел бы произвести следующий вывод с XSL (можно использовать 1.0, 2.0 или даже 3.0):
<?xml version="1.0"?>
<body>
<p>See URL: <a href="http://foo">http://foo</a></p>
<p>See URL: <a href="http://bar">http://bar</a></p>
</body>
У меня есть следующая заглушка таблицы стилей XSL, но я изо всех сил пытаюсь найти подходящую функцию, которая будет токенизировать строку ресурса, извлечь {0} и заменить ее на узел. replace()
, похоже, не поможет, так как работает только со строками:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:variable name="urlResString"
select="/root/resources/resourceString[@id='url-fmt']" />
<xsl:template match="/">
<body>
<xsl:apply-templates select="/root/urls/url" />
</body>
</xsl:template>
<xsl:template match="url">
<p>
<xsl:variable name='linkToInsert'>
<a href='{.}'><xsl:value-of select='.'/></a>
</xsl:variable>
<xsl:value-of
select="replace($urlResString, '\{0}', $linkToInsert)" />
</p>
</xsl:template>
</xsl:stylesheet>
Что генерируется здесь:
<?xml version="1.0"?>
<body>
<p>See URL: http://foo</p>
<p>See URL: http://bar</p>
</body>
Если бы вы могли указать мне правильные функции, это было бы здорово.
Примечание: возможно, мне придется сделать это для строк с {0}
, {1}
и т. Д., Как функции форматирования строк в .NET.
Спасибо!