2017-09-27 57 views
0

我嘗試使用逗號隔開的標記化字符串作爲O,T,A,F,M,I,S,R,A(已對齊),V,PFT我得到的結果爲OTAFMISRA對衝V PFT A得到重複,哪個是不正確的,它應該有A(對衝)作爲一個令牌。xsl字符串標記化重複值

我嘗試下面的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> 

預期成果是OTAFMISRA(對衝)V PFT

+0

如果你想要一個字符串開始,你需要''。 –

+0

更新了我的文章我只是想把代碼塊。 – user3669116

+0

請考慮發佈一個最小但完整且可執行的示例,以便我們重現此問題。恐怕'select =「O,T,A,F,M,I,S,R,A(已對衝),V,PFT」'根本就不是字符串。一個沒有引號的'O'會嘗試選擇一個名爲'O'的上下文節點的子元素,'A(Hedged)'會嘗試調用一個名爲'A'的函數,該函數由一個名爲'Hedged '。 –

回答

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> 

渲染爲

ö

Ť

˚F

中號

小號

ř

A(對衝)

V

PFT

+0

謝謝,這很奏效,字符串列表中也有空間導致問題。在標記之前,我已經刪除了空格。 – user3669116