微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在Java中找到转换器以动态替换现有XSLT文件的值,反之亦然

如何解决无法在Java中找到转换器以动态替换现有XSLT文件的值,反之亦然

有人可以向我提供使用Java对象动态替换现有XSLT文件的值的源代码

XSLT文件

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates select="CheckDomainCmd"/>
    </xsl:template>

    <xsl:template match="CheckDomainCmd">
        <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
            <command>
                <check>
                    <domain:check xmlns:domain="http://www.nic.cz/xml/epp/domain-1.4" xsi:schemaLocation="http://www.nic.cz/xml/epp/domain-1.4 domain-1.4.xsd">
                        <domain:name><xsl:value-of select="DomainName"/>.<xsl:value-of select="TLD" /></domain:name>
                    </domain:check>
                </check>
                <clTRID>
                    <xsl:value-of select="RIMTransactionID"/>
                </clTRID>
            </command>
        </epp>
    </xsl:template>
</xsl:stylesheet>

Java对象:

public class checkDomain {

    private String DomainName;
    private String TLD;
    private String RIMTransactionID;
    
    // getters and setters
}

我需要Java / spring中的源代码才能将值动态地放入XSLT select属性。 例如,在java对象中,我们具有以下值,以及如何将java对象值转换为XSLT属性

public class XSLTConversion {
    
    public static void main(String[] args) {
        CheckDomain checkDomain = new CheckDomain():
        checkDomain.setDomainName("test");
        checkDomain.setTLD("com");
        checkDomain.setRIMTransactionID("qwertyco123456");
        
        replaceValuesToXSLTFile(checkDomain,"checkdomain.xslt");
    }
    public static void replaceValuesToXSLTFile(CheckDomain checkDomain,String fileName) {
        
    }
}

转换后,我需要如下文件内容

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates select="CheckDomainCmd"/>
    </xsl:template>

    <xsl:template match="CheckDomainCmd">
        <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
            <command>
                <check>
                    <domain:check xmlns:domain="http://www.nic.cz/xml/epp/domain-1.4" xsi:schemaLocation="http://www.nic.cz/xml/epp/domain-1.4 domain-1.4.xsd">
                        <domain:name><xsl:value-of select="test"/>.<xsl:value-of select="com" /></domain:name>
                    </domain:check>
                </check>
                <clTRID>
                    <xsl:value-of select="qwertyco123456"/>
                </clTRID>
            </command>
        </epp>
    </xsl:template>
</xsl:stylesheet>

解决方法

您的XSLT代码需要声明全局参数并引用它们:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="DomainName"/>
    <xsl:param name="TLD"/>
    <xsl:param name="RIMTransactionID"/>
    <xsl:template match="/">
        <xsl:apply-templates select="CheckDomainCmd"/>
    </xsl:template>

    <xsl:template match="CheckDomainCmd">
        <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
            <command>
                <check>
                    <domain:check xmlns:domain="http://www.nic.cz/xml/epp/domain-1.4" xsi:schemaLocation="http://www.nic.cz/xml/epp/domain-1.4 domain-1.4.xsd">
                        <domain:name><xsl:value-of select="$DomainName"/>.<xsl:value-of select="$TLD" /></domain:name>
                    </domain:check>
                </check>
                <clTRID>
                    <xsl:value-of select="$RIMTransactionID"/>
                </clTRID>
            </command>
        </epp>
    </xsl:template>
</xsl:stylesheet>

然后,您的Java代码可以从XSLT创建Transformer并使用例如在调用transformer.setParameter("TLD",checkDomain.getTLD())方法之前,请使用transform(请参阅https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/Transformer.html#setParameter-java.lang.String-java.lang.Object-)等其他参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。