Как динамически назначить имя и ссылку для тега привязки в xsl - PullRequest
1 голос
/ 11 ноября 2011

У меня есть требование, чтобы xml мог иметь одну или несколько служб (имя может отличаться), и у меня есть контент, который должен иметь все эти доступные службы из xml, как показано ниже

<li><a href="#_cms">CMS</a></li>
<li><a href="#_dis">DIS</a></li>

, но выше я жестко закодировал содержимое тега a и href, поскольку я знаю, что это значения, но в реальном времени я бы не знал этих имен, поэтому как установить href и anchor tag contents на основеЗначения XML?

Итак, я получил приведенный ниже оператор for-each, который возвращает мне все имена служб из XML

<xsl:variable name="number">
  <xsl:number/>
</xsl:variable>

<xsl:for-each select="csmclient/product/domainmetadata/domainmetadata_service">
    <li><a href="#_ser{$number}"><xsl:value-of select="@name"/><xsl:value-of select="position()"/></a></li>
</xsl:for-each>

.
.
.

<!--far below end-->
<xsl:for-each select="domainmetadata/domainmetadata_service">
    <h3>Service Name: <span style="color:#328aa4"><a name="_ser{$number}" href="#_top"><xsl:value-of select="@name"/></a></span></h3>
    .
    .
    .
</xsl:for-each>

, но, похоже, он не работает, он дает мневсе мои услуги, но ссылка не работает.Любые другие идеи?

Примечание : я получил помощь от по этой ссылке вопроса , которая имела аналогичное требование.

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Используйте что-то вроде ниже, должно работать

<xsl:for-each select="csmclient/product/domainmetadata/domainmetadata_service">
    <li><a href="#{generate-id()}"><xsl:value-of select="@name"/></a></li>
</xsl:for-each>

<xsl:for-each select="domainmetadata/domainmetadata_service">
    <h3>Service Name: <span style="color:#328aa4"><a name="{generate-id()}" href="#_top"><xsl:value-of select="@name"/></a></span></h3>
</xsl:for-each> 
1 голос
/ 11 ноября 2011

Существует функция xslt generate-id(), которая дает уникальный текстовый идентификатор для любого узла в XML.

http://www.w3.org/TR/xslt#function-generate-id

0 голосов
/ 11 ноября 2011
 <li><a href="#_ser{$number}"><xsl:value-of select="@name"/><xsl:value-of select="position()"/></a></li>

но, похоже, не работает ...

То, что вы пытаетесь написать, это (не обсуждая вообще, если это однозначно идентифицирует узел):

<li>
  <a href="#_ser{$number}{@name}{position()}"/>
</li> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...