XSL:从一个模式的多个实例调用特定元素

时间:2012-09-20 23:57:19

标签: xslt xpath xsd

我创建了一个名为“BusLocationLinks”的组件,它存储了业务名称以及我创建的地图的坐标。

我有近50个具有相同模式的业务位置(BusLocationsLinks),并且只想列出该名称的所有组件组件的元素“业务名称”。我已经尝试了所有东西,但不能让它们全部显示出来。有什么建议吗?

这是我目前的代码:

 <xsl:template name="BusLocationLinks">
      <xsl:for-each select="BusLocationLinks/BusinessName">
    <li class="active">
      <xsl:value-of select="BusinessName" />
    </li>
      </xsl:for-each>
 </xsl:template>

我的xml代码看起来类似于:

<BusLocationLinks>
    <BusinessName>Star Property</BusinessName>
</BusLocationLinks>

2 个答案:

答案 0 :(得分:2)

如果没有看到您的XML,很难诊断出问题。但是,您可能具有以下结构:

<BusLocationLinks>
    <BusinessName>name1</BusinessName>
    <BusinessName>name2</BusinessName>
    <BusinessName>name3</BusinessName>
</BusLocationLinks>

如果是这种情况,那么你应该像这样调整你的XSLT:

<xsl:template name="BusLocationLinks">
  <xsl:for-each select="BusinessName">
    <li class="active">
      <xsl:value-of select="." />
    </li>
  </xsl:for-each>
</xsl:template>

答案 1 :(得分:1)

xsl:for-each指令的主体将上下文节点重置为所选节点集中的一个节点(每次评估for-each的主体时都是不同的节点)。

在您的示例中,这意味着在for-each的主体内,当前节点是您选择的BusLocationLinks/BusinessName元素之一。你的循环为每个元素创建一个list-item元素(检查你的输出,我希望你会在那里看到它们),其中包含上下文节点的BusinessName子元素的值。上下文节点与表达式BusLocationLinks/BusinessName匹配,因此您要查找与BusLocationLinks / BusinessName / BusinessName匹配的节点的值。如果您没有任何与表达式BusLocationLinks / BusinessName / BusinessName匹配的节点,那么您将获得空的li元素。

尝试<xsl:value-of select="."/>