如何在XSL中连接数据并插入" /"每个显示

时间:2017-11-28 17:08:23

标签: xml xslt

我想结合使用for-each并插入" /"每个显示这是完整XML的例子:

<root>
<level1>
    <level2 name="ex1">
        <title>something1</title>
        <country>
          <value>Malaysia</value>
          <value>Singapore</value>
          <value>Brunei</value>
          <value>Japan</value>
          <value>China</value>
      </country>
    </level2>

    <level2 name="ex2">
        <title>something2</title>
        <country>
          <value>Brunei</value>
          <value>Japan</value>
          <value>China</value>
      </country>
    </level2>

</level1>
</root>

我尝试使用&#34; /&#34; (我直接关注每个人):

<xsl:for-each select="//level2">

    Name : <xsl:value-of select="@name" /> <br />
    Title : <xsl:value-of select="title" /> <br />
    Country : <xsl:value-of select="concat(country, '/')" /> <br />
    </br>

 </xsl:for-each>

但是显示:

Name : ex1
Title : something1
Country : Malaysia Singapore Brunei Japan China /

Name : ex2
Title : something2
Country : Brunei Japan China /

但我希望它显示如下:

name : ex1
Title : something1
Country : Malaysia/Singapore/Brunei/Japan/China

name : ex2
Title : something2
Country : Brunei/Japan/China

1 个答案:

答案 0 :(得分:0)

在XSLT 1.0中,您需要单独处理每个MariaDB [final]> delimiter ; MariaDB [final]> insert into D_FACTURA values(5.00,10.00,1); ERROR 1241 (21000): Operand should contain 1 column(s) 并检查位置以查看是否应输出country/value

尝试将/更改为:

xsl:for-each

或者,您可以使用<xsl:for-each select="//level2"> Name : <xsl:value-of select="@name" /> Title : <xsl:value-of select="title" /> Country : <xsl:for-each select="country/value"> <xsl:if test="position() > 1">/</xsl:if> <xsl:value-of select="."/> </xsl:for-each> </xsl:for-each> (推送处理)代替xsl:for-each(拉动处理)......

xsl:apply-templates

或拉/推两者的组合......

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:strip-space elements="*"/>
  <xsl:output method="text"/>

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

  <xsl:template match="level2">
    <xsl:text>&#xA;&#xA;Name : </xsl:text>
    <xsl:value-of select="@name"/>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="title">
    <xsl:text>&#xA;Title : </xsl:text>
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="country">
    <xsl:text>&#xA;Country : </xsl:text>
    <xsl:apply-templates select="value"/>
  </xsl:template>

  <xsl:template match="value">
    <xsl:if test="position() > 1">
      <xsl:text>/</xsl:text>
    </xsl:if>
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>