xsl string tokenize重复值

时间:2017-09-27 12:36:48

标签: xslt-2.0

我有字符串作为O,T,A,F,M,I,S,R,A(对冲),V,PFT当尝试使用逗号进行标记化时我得到的结果为OTAFMISRA对冲V PFT与A得到重复,哪个不正确,它应该有A(对冲)作为一个标记。

我在xsl下面尝试过: XML节点的值为O,T,A,F,M,I,S,R,A(对冲),V,PFT

XML:

<?xml version="1.0" encoding="UTF-8"?>
<path>
<some>O, T, A, F, M, I, S, R, A (Hedged), V, PFT</some>
</path>

 <xsl:variable name="val" select="//path/some" />
<xsl:for-each select="str:tokenize($val, ', ')">
  <xsl:variable name="tokVal" select="."/>
<h2><xsl:value-of select="$tokVal"/></h2>
</xsl:for-each>

预期输出为O T A F M I S R A(对冲)V PFT

1 个答案:

答案 0 :(得分:1)

使用XSLT 2.0和最终发布的XML输入我无法在http://xsltransform.net/bEzjRKJ重现问题,输入是

<path>
<some>O, T, A, F, M, I, S, R, A (Hedged), V, PFT</some>
</path>

最小XSLT

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
      <html>
        <head>
          <title>Test</title>
        </head>
        <xsl:apply-templates/>
      </html>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="some">
        <xsl:for-each select="tokenize(., '\s*,\s*')">
            <h2>
                <xsl:value-of select="."/>
            </h2>
        </xsl:for-each>
    </xsl:template>
</xsl:transform>

输出

<!DOCTYPE html
  PUBLIC "XSLT-compat">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Test</title>
   </head>
   <path>

      <h2>O</h2>
      <h2>T</h2>
      <h2>A</h2>
      <h2>F</h2>
      <h2>M</h2>
      <h2>I</h2>
      <h2>S</h2>
      <h2>R</h2>
      <h2>A (Hedged)</h2>
      <h2>V</h2>
      <h2>PFT</h2>

   </path>
</html>

呈现为

0

Ť

A

˚F

中号

取值

[R

A(对冲)

V

PFT