2012-12-14 31 views
0

輸入:"abcdef$ghi$jklmno$pqrst$ wx $yx$"提取字符串1.0

預期輸出:

<tokens> 
<token>$ghi$</token> 
<token>$pqrst</token> 
<token>$yx$</token> 
</tokens> 

作爲每個樣品的輸入字符串,輸出必須像預期輸出通過使用XSLT 1.0

在前提前

+2

請*親切*張貼代碼告訴我們你已經嘗試過。 –

回答

1

對於每一對美元符號(1,2),(3,4),...(2 × n - 1,2 × ñ)你想與美元符號數2 × ñ文本令牌元素 - 1和美元符號數2 ñ

其中一個案件將必然適用。案例1:有一些固定的最大值n,它比較小(比如小於5或10)。在這種情況下,xs:variable指配的簡單順序可以適當地調用substring-beforesubstring-after就足夠了,就完成了。第一個美元符號後

  • S0是原始的字符串,S1子串在S0T1的字符串的第一個美元符號之前:最終你會像這樣的東西在s1r1第一個美元符號後的子串s1
  • 現在讓S2是第一個美元符號後的子字符串中R1T2第一美元符號前的子字符串中S2R2第一美元符號後的子字符串中S2
  • 根據需要重複:用於在3至Ñ,讓小號是第一美元符號後的子串在- [R - 1第一個美元符號前的子串s ir i第一個美元符號後的子字符串s i

案例2:沒有最大值n。在這種情況下,XSLT 1中的直接方法。(b)構造一個包含美元符號的元素,第一個美元符號之後和第二個美元符號之前的字符串,以及(c)調用本身在第二個美元符號之後遞歸地與子串進行遞歸。爲空字符串,帶有奇數美元符號的字符串和其他輸入錯誤添加適當的邊界條件,就完成了。

因此:請閱讀XSLT 1.0的字符串函數並解決您的問題。如果你有進一步的麻煩,請回來(並展示你的工作)。

1

希望下面的xsl幫助你。有用。我自己試了一下。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes"/> 

<xsl:template match="/"> 

    <xsl:variable name="input"> 
     <xsl:text>abcdef$ghi$jklmno$pqrst$ wx$yx$</xsl:text> 
    </xsl:variable> 

    <tokens>  
     <xsl:text>&#10;</xsl:text> 
     <xsl:analyze-string select="$input" regex="(\$[a-z]+\$)"> 
      <xsl:matching-substring> 
       <token> 
       <xsl:value-of select="regex-group(1)"/> 
       </token> 
       <xsl:text>&#10;</xsl:text> 
      </xsl:matching-substring> 
     </xsl:analyze-string> 
    </tokens> 

</xsl:template> 

</xsl:stylesheet> 
+0

感謝凱特,但我們必須使用XSLT 1.0來做,如果我沒有錯,那麼你的解決方案是在XSLT 2.0 – user1904426

+0

@ user1904426 - 是的,對。 – Linda