2017-07-30 39 views
0

我在Windows XP上使用Saxon 9.8和xslt3.0將xml數據庫轉換爲每行一個數據庫條目的普通文本文件。 但我需要處理與正則表達式和條件的值,當我添加的代碼以下部分:XSLT使用正則表達式轉換值

<xsl:analyze-string select="sbtime/@stmerid" 
    regex="([hm]{{1}})([0-9]{{1,2}})([ew]{{1}})([0-9]{{0,2}})"> 
    <xsl:matching-substring> 
    <xsl:choose> 
     <xsl:when test="regex-group(3) = 'e'"> 
     <xsl:text>+</xsl:text> 
     </xsl:when> 
     <xsl:when test="regex-group(3) = 'w'"> 
     <xsl:text>-</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>+</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
    <xsl:choose> 
     <xsl:when test="regex-group(1) = 'h'"> 
     <xsl:number value="regex-group(2)" format="01"/> 
     </xsl:when> 
     <xsl:when test="regex-group(1) = 'm'"> 
     <xsl:text>00:</xsl:text> 
     <xsl:number value="regex-group(2)" format="01"/> 
     <xsl:text>:</xsl:text> 
     <xsl:number value="regex-group(4)" format="01"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>+1</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:matching-substring> 
    </xsl:analyze-string> 

當我加入這個部分我碰到下面的錯誤代碼:

Transform.exe" -s:db_export_sample.xml -xsl:dbx_dma_zet01.xsl -o:output.txt 

Exception non gérée : System.TypeInitializationException: Une exception a été le 
vée par l'initialiseur de type pour 'net.sf.saxon.expr.number.NumberFormatter'. 
---> System.TypeInitializationException: Une exception a été levée par l'initial 
iseur de type pour 'net.sf.saxon.regex.charclass.Categories'. ---> java.lang.Run 
timeException: Unable to read categories.xml file 
    à net.sf.saxon.regex.charclass.Categories.build() 
    à net.sf.saxon.regex.charclass.Categories.getCategory(String cat) 
    à net.sf.saxon.regex.charclass.Categories..cctor() 
    --- Fin de la trace de la pile d'exception interne --- 
    à net.sf.saxon.regex.charclass.Categories.getCategory(String cat) 
    à net.sf.saxon.expr.number.NumberFormatter..cctor() 
    --- Fin de la trace de la pile d'exception interne --- 
    à net.sf.saxon.expr.number.NumberFormatter..ctor() 
    à net.sf.saxon.style.XSLNumber.prepareAttributes() 
    à net.sf.saxon.style.StyleElement.processAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.StyleElement.processAllAttributes() 
    à net.sf.saxon.style.XSLTemplate.processAllAttributes() 
    à net.sf.saxon.style.PrincipalStylesheetModule.processAllAttributes() 
    à net.sf.saxon.style.PrincipalStylesheetModule.preprocess() 
    à net.sf.saxon.style.Compilation.compilePackage(Source source) 
    à net.sf.saxon.style.StylesheetModule.loadStylesheet(Source styleSource, Comp 
ilation compilation) 
    à net.sf.saxon.style.Compilation.compileSingletonPackage(Configuration config 
, CompilerInfo compilerInfo, Source source) 
    à net.sf.saxon.s9api.XsltCompiler.compile(Source source) 
    à net.sf.saxon.Transform.doTransform(String[] args, String command) 
    à Saxon.Cmd.DotNetTransform.Main(String[] args) 

順便說一句對不起代碼中的法語語言可能是不可理解的。 我不習慣xslt,但根據xslt和saxon文檔,它似乎是正確的。

最好的問候。

+0

你正在使用什麼構建?請參閱https://saxonica.plan.io/issues/3283和https://saxonica.plan.io/issues/3252 –

+0

我是.NET build 9.8.0.1 HE,但嘗試使用JAVA 9.8.0.3 HE,它工作正常精細。謝謝。 – RyosanCiffer

回答