首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT2.0验证因net.sf.saxon.TransformerFactoryImpl而失败

XSLT2.0验证因net.sf.saxon.TransformerFactoryImpl而失败
EN

Stack Overflow用户
提问于 2014-09-20 20:20:12
回答 1查看 1.3K关注 0票数 0

我有下面的示例来验证xslt样式表。在不同的论坛中都提到我们应该为XSLT2.0样式表"net.sf.saxon.TransformerFactoryImpl“。根据我已经更新了我的代码。但这段代码只适用于少数情况。例如,代码不适用于我在下面附加的示例。如果我将样例样式表版本更改为1 (version="1.0"),则代码可以正常工作。否则它会失败。我相信样例样式表是有效的XSLT2.0文档。

这导致了很多问题,如何在解析之前验证样式表?

代码语言:javascript
复制
   package com.ibm.mq.id;

   import javax.xml.transform.TransformerConfigurationException;
   import javax.xml.transform.stream.StreamSource;

   import net.sf.saxon.TransformerFactoryImpl;

   public class xsltTransformationEx {
/**
 * @param args
 */
public static void main(String[] args) {


        String path="C://Work//ex.xsl";
        TransformerFactoryImpl factory = new TransformerFactoryImpl();
        try
        {

            javax.xml.transform.Templates template = factory.newTemplates(new  StreamSource(path));
            //VALIDATING  XSLT is valid or not
            //Transformer trans =  factory.newTransformer(new StreamSource(path));

         template.newTransformer();
        }
        catch(TransformerConfigurationException ex)
        {
            ex.printStackTrace();
        }
}
}

我的XSLT示例如下:

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
    <xsl:output indent="yes" method="xml"/>
    <xsl:variable name="FamilyMembers"        select="bpws:getVariableData('HSPACT_FamlyNumbers')"></xsl:variable>
    <xsl:template match="Molers_Output">
        <xsl:element name="Molers_Output">
             <!--
             <xsl:element name="row">
                       <xsl:value-of select="row"/>
            </xsl:element>
             -->
            <xsl:for-each select="row[Hosp_Acct_Num = $FamilyMembers/rows/row/normalize-   space(HACCT_)]">
                <xsl:variable name="Account"><xsl:value-of select="Hosp_Acct_Num"></xsl:value-of></xsl:variable>
                <xsl:element name="row">
                    <xsl:for-each select="node()">
                        <xsl:choose>
                            <xsl:when test="name()='Family_Num'">
                                <xsl:element name="Family_Num">
                                    <xsl:value-of select="$FamilyMembers/rows/row[normalize-space(HACCT_) = $Account]/HAFAM_"/>
                                </xsl:element>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:copy copy-namespaces="yes" inherit-namespaces="yes">
                                    <xsl:value-of select="current()"/>
                                </xsl:copy>
                            </xsl:otherwise>
                        </xsl:choose>        
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

发布于 2014-10-02 19:14:13

您的样式表调用了名称空间http://schemas.xmlsoap.org/ws/2003/03/business-process/中名为bpws:getVariableData的函数,但该函数没有定义,因此会出现编译错误。您需要使用定义函数的模块xsl:functionxsl:import/include来定义该函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25948691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档