XSLT解析多行

时间:2009-10-28 00:36:28

标签: xml parsing xslt

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

我已经在属性级别解析了xslt,所以我只需要执行<xsl:value-of select="Attribute[@name='somethingelse']/attribute::value"/>

就可以得到值blah

如何选择具有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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

你也可以像这样分配一个变量:

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

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