0
<data>
<Attributes>
 <Attribute name='somethingelse' value='blah'/>
 <Attribute name='forms'>
    <List>
      <String>xform</String>
      <String>yform</String>
    </List>
  </Attribute>
</Attributes>
</data>

我已经在属性级别解析 xslt,所以我可以通过做得到值 blah<xsl:value-of select="Attribute[@name='somethingelse']/attribute::value"/>

我如何为具有 2 个字符串 xform 和 yform 的表单进行选择。我想将 xform 和 yform 放在同一行。从其他线程有人给了我以下代码:

<xsl:template match="/">
  <xsl:for-each select="//String">
<xsl:value-of select="."/><xsl:if test="not(position() = last())">|</xsl:if>
  </xsl:for-each>
  </xsl:template>

我不知道如何把它们放在一起。我的目标是输出如下:

废话,xform|yform

4

2 回答 2

1

不确定我的问题是否正确,但我想这应该输出你想要的:

<xsl:template match="/">
  <xsl:apply-templates select="//Attributes"/>
</xsl:template>

<xsl:template match="Attributes">
  <xsl:value-of select="Attribute[@name='somethingelse']/@value"/>
  <xsl:text>,</xsl:text>
  <xsl:for-each select="Attribute[@name='forms']/List/String">
    <xsl:value-of select="."/>
    <xsl:if test="position() != last()">|</xsl:if>
  </xsl:for-each>
</xsl:template>
于 2009-10-28T01:21:24.887 回答
0

您还可以像这样分配给单个变量:

<xsl:variable name="strings">
    <xsl:value-of select="concat(String[1],String[2],String[3])" />
</xsl:variable>

第三个字符串是否存在并不重要。这是一种 hack,我实际上硬编码了 10 个,我的代码在每个代码之间添加了 '###',这样我就可以运行 'contains($strings, '###Keyword'),这基本上是检查是否有任何字符串以特定字符串开头。

于 2011-12-09T01:14:24.493 回答