简体   繁体   English

Xalan + XSLT + JAVA

[英]Xalan+ XSLT+ JAVA

My xsl file 我的xsl文件

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:good="xalan://com.epam.laba.model.Good"
xmlns:validator="xalan://com.epam.laba.validator.ValidatorXslGood">

    <xsl:include href="parameter.xsl"/>
    <xsl:param name="validator"/>
    <xsl:param name="good"/>

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

    <xsl:template match="/|node()|@*">
        <xsl:if test="validator:validateGood($good)">
            <xsl:copy>
                <xsl:apply-templates
                select="node()|@*" />
            </xsl:copy>
        </xsl:if>
    </xsl:template>

...... ......

Java code where create validator and set to xsl 创建验证器并设置为xsl的Java代码

    Good good=fillGood(parameters); 
    ValidatorXslGood validatorXslGood=new ValidatorXslGood();
    Source sourceXSL = new StreamSource(xsltFile);
    Transformer transformer = factory.newTransformer(sourceXSL);
    transformer.setParameter(SUBCATEGORY_ID_VALUE, subcategoryId);
    transformer.setParameter(GOOD, good);
    transformer.setParameter(VALIDATOR, validatorXslGood);

    transformer.transform(xmlSource, new StreamResult(outWriter));

but

The first argument to the non-static Java function 'validateGood' is not a valid object reference. 非静态Java函数'validateGood'的第一个参数不是有效的对象引用。 Cannot convert data-type 'void' to 'boolean'. 无法将数据类型“ void”转换为“ boolean”。

Can you explain me what wrong? 你能解释给我什么错吗?

UPD: UPD:

ValidatorXslGood.java code: ValidatorXslGood.java代码:

public class ValidatorXslGood {

private Good good;

private Map<String, String> setErrors;
private ResourceBundleManager errorManager;

public ValidatorXslGood() {
    errorManager = new ResourceBundleManager();
    errorManager.setResourceBundle(RESOURCE_BUNDLE__FOR_ERROR_FILE);
}

public Good getGood() {
    return good;
}

public void setGood(Good good) {
    this.good = good;
}

public boolean validateGood(Good good) {
    if (checkingName(good.getName())) {
        return true;
    } else {
        return false;
    }
}

I try create validator in XSL 我尝试在XSL中创建验证器

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:good="xalan://com.epam.laba.model.Good"
xmlns:validator="xalan://com.epam.laba.validator.ValidatorXslGood"
    extension-element-prefixes="validator" >

    <xsl:include href="parameter.xsl"/>
    <xsl:variable name="validatorConstructor" select="validator:new()"/>
    <xsl:param name="validator"/>
    <xsl:param name="good"/>

........ ........

but i have new error and i can't understand where error in path 但我有新的错误,我不明白路径中的错误

Cannot find class 'com.epam.laba.validator.ValidatorXslGood'. 找不到类“ com.epam.laba.validator.ValidatorXslGood”。 Cannot find external constructor 'com.epam.laba.validator.ValidatorXslGood'. 找不到外部构造函数“ com.epam.laba.validator.ValidatorXslGood”。

It looks like you miss the syntax. 您似乎错过了语法。 Here it is stated that the syntax should be prefix:methodName(object, args) , where prefix is the extension namespace prefix (which you need to declare as xmlns:prefix="URI" extension-element-prefixes="prefix ..." ) and methodName is the name of the instance method to invoke on object with the args arguments. 此处声明语法应为prefix:methodName(object,args) ,其中prefix是扩展名称空间前缀(您需要声明为xmlns:prefix =“ URI” extension-element-prefixes =“ prefix ... “ )和methodName是使用args参数在对象上调用的实例方法的名称。

<xsl:stylesheet
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:validator="xalan://com.epam.laba.parser.validator.ValidatorXslGood"
     extension-element-prefixes="validator" ... >

<xsl:param name="validator"/> <!-- That is in reality validatorObject -->
<xsl:param name="good"/>

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

<xsl:template match="/|node()|@*">
    <xsl:if test="validator:validateGood($validator, $good)">
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM