XSLT 2.0 [SXXP0003]中的奇怪错误

| 在过去的一天中,我一直在使用XSLT 2.0,试图解析纯文本文件。 显然,我什至无法真正实现它的功能,目前,xsl不必执行任何操作,仅需在saxonb-xslt处理器中正确加载即可。 XSL:
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fn=\"http://www.w3.org/2005/02/xpath-functions\"  version=\"2.0\">

<xsl:output method=\"xml\" indent=\"yes\"/>

<xsl:template match=\'/\'>
<add_adverts>
<Body>
<Envelope>
<Advert>
<xsl:for-each select=\"tokenize(unparsed-text(\'A2.blm\'), \'\\r?\\n\')\">
 <fff>?</fff>
</xsl:for-each>
</Advert>
</Envelope>
</Body>
</add_adverts>  
</xsl:template>

</xsl:stylesheet>
我如何运行它:
saxonb-xslt -s:A2.blm -xsl:eraxsl.xsl -o:test.xml
blm文件是纯文本文件,第一行是:#HEADER#最后一行是#END#其中有一个名为#DATA#的行,我想从中进行解析,直到最后。 每个记录都用^分隔。 谢谢,
已邀请:
我完全不复制此问题-我在与XSLT样式表相同的目录中创建了“ A2.blm”文件。转换按预期进行。 此错误来自XML解析器,而不是XSLT处理器。您很可能已经提供了一些格式不正确的XML文档(或完全缺少)作为源XML文件。 很可能找不到或访问文件“ A2.blm”,请检查一下。 为了找到该文件,它必须与样式表文件位于同一目录中。 根据XSLT 2.0 W3C规范: \“ unparsed-text函数读取外部资源(例如文件),并以字符串形式返回其内容。 $ href参数必须是URI形式的字符串。 URI必须不包含片段标识符,并且必须标识可以作为文本读取的资源。如果URI是相对URI,则相对于静态上下文中的基本URI进行解析。 \“ 最重要的是: \“注意: 如果不同的基本URI是适当的(例如,当解析从源文档读取的相对URI时),则应在将其传递给未解析的文本功能之前使用resolve-uriFO函数来解析该相对URI。 这证明了其余的转换可以按预期进行:
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fn=\"http://www.w3.org/2005/02/xpath-functions\"  version=\"2.0\">
    <xsl:output method=\"xml\" indent=\"yes\"/>
    <xsl:template match=\'/\'>
        <add_adverts>
            <Body>
                <Envelope>
                    <Advert>
                        <xsl:for-each select=\"tokenize(., \'\\r?\\n\')\">
                            <fff>?</fff>
                        </xsl:for-each>
                    </Advert>
                </Envelope>
            </Body>
        </add_adverts>
    </xsl:template>
</xsl:stylesheet>
当此转换应用于此XML文档时:
<t>1&#xA;2&#xD;&#xA;3&#xA;</t>
所需的正确结果产生了:
<add_adverts xmlns:fn=\"http://www.w3.org/2005/02/xpath-functions\">
   <Body>
      <Envelope>
         <Advert>
            <fff>?</fff>
            <fff>?</fff>
            <fff>?</fff>
            <fff>?</fff>
         </Advert>
      </Envelope>
   </Body>
</add_adverts>
saxon-xslt的“ 5”参数指定了我认为必须为xml格式的源文档。在您的示例中,您不需要此源,因为您在模板中指定了文件名。解决方案是删除源参数,并指定一个命名模板而不是匹配项作为起点:
<xsl:template name=\"main\">
    <add_adverts>...<add_adverts>
</xsl:template>


saxonb-xslt -xsl:eraxsl.xsl -o:test.xml -it:main

要回复问题请先登录注册