2014-02-12 57 views
0

在下面的XML中,我试图从括号中的数字创建一个id。因此,我试图抓住开放和关闭括号之间的数字,然后将它们用作xmlid属性的一部分。Xslt分析字符串错误

XML输入

<list> 
<head>Commentator.</head> 
<item>(32) Materia prima nullam formam habet omnino, nec universalem, 
nec particularem, sed recipit primo formam universalem et medi- 
ante illa, recipit omnes alias formas usque ad individuales.</item> 
<item>(33) Item Commentator : species non est forma tantum, sed etiam 
quid aggregatum ex materia et forma.</item> 
<item>(34) Item universale non habet esse, nisi secundum quod est in anima.</item> 
</list> 

XSLT

<xsl:template match="tei:item"> 
    <xsl:analyze-string select="." regex="\(([^\)]*)\)"/> 
    <xsl:variable name="numberid"><xsl:value-of select="regex-group(1)"/></xsl:variable> 
    <item xml:id="aa-meta-{$numberid}"><xsl:apply-templates/></item> 
</xsl:template> 

但它不工作。

撒克逊给我以下错误。

XTSE1130:至少有一个的xsl:匹配子串或XSL:非匹配子串元件必须存在

请帮助。

回答

0

看起来像based on the spec您至少需要xsl:matching-substringxsl:non-matching-substring中的一个作为xsl:analyze-string element上的子项。

一个在规范的例子如下:

<xsl:analyze-string select="body" regex="\[(.*?)\]"> 
    <xsl:matching-substring> 
    <cite><xsl:value-of select="regex-group(1)"/></cite> 
    </xsl:matching-substring> 
    <xsl:non-matching-substring> 
    <xsl:value-of select="."/> 
    </xsl:non-matching-substring> 
</xsl:analyze-string> 

此基础上,你应该能够到您的模板更新到类似下面:

<xsl:template match="tei:item"> 
    <xsl:analyze-string select="." regex="\(([^\)]*)\)"> 
     <xsl:matching-substring> 
     <item xml:id="aa-meta-{regex-group(1)}"><xsl:apply-templates/></item> 
     </xsl:matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 
+0

真棒。谢谢!! – Jeff