SpringBoot—无法在java中找到转换器来动态替换现有xslt文件的值,反之亦然

6ljaweal  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(485)

有人能给我提供使用java对象动态替换现有xslt文件值的源代码吗
xslt文件:

  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4. <xsl:apply-templates select="CheckDomainCmd"/>
  5. </xsl:template>
  6. <xsl:template match="CheckDomainCmd">
  7. <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">
  8. <command>
  9. <check>
  10. <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">
  11. <domain:name><xsl:value-of select="DomainName"/>.<xsl:value-of select="TLD" /></domain:name>
  12. </domain:check>
  13. </check>
  14. <clTRID>
  15. <xsl:value-of select="RIMTransactionID"/>
  16. </clTRID>
  17. </command>
  18. </epp>
  19. </xsl:template>
  20. </xsl:stylesheet>

java对象:

  1. public class checkDomain {
  2. private String DomainName;
  3. private String TLD;
  4. private String RIMTransactionID;
  5. // getters and setters
  6. }

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

  1. public class XSLTConversion {
  2. public static void main(String[] args) {
  3. CheckDomain checkDomain = new CheckDomain():
  4. checkDomain.setDomainName("test");
  5. checkDomain.setTLD("com");
  6. checkDomain.setRIMTransactionID("qwertyco123456");
  7. replaceValuesToXSLTFile(checkDomain, "checkdomain.xslt");
  8. }
  9. public static void replaceValuesToXSLTFile(CheckDomain checkDomain, String fileName) {
  10. }
  11. }

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

  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4. <xsl:apply-templates select="CheckDomainCmd"/>
  5. </xsl:template>
  6. <xsl:template match="CheckDomainCmd">
  7. <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">
  8. <command>
  9. <check>
  10. <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">
  11. <domain:name><xsl:value-of select="test"/>.<xsl:value-of select="com" /></domain:name>
  12. </domain:check>
  13. </check>
  14. <clTRID>
  15. <xsl:value-of select="qwertyco123456"/>
  16. </clTRID>
  17. </command>
  18. </epp>
  19. </xsl:template>
  20. </xsl:stylesheet>
eivgtgni

eivgtgni1#

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

  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:param name="DomainName"/>
  4. <xsl:param name="TLD"/>
  5. <xsl:param name="RIMTransactionID"/>
  6. <xsl:template match="/">
  7. <xsl:apply-templates select="CheckDomainCmd"/>
  8. </xsl:template>
  9. <xsl:template match="CheckDomainCmd">
  10. <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">
  11. <command>
  12. <check>
  13. <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">
  14. <domain:name><xsl:value-of select="$DomainName"/>.<xsl:value-of select="$TLD" /></domain:name>
  15. </domain:check>
  16. </check>
  17. <clTRID>
  18. <xsl:value-of select="$RIMTransactionID"/>
  19. </clTRID>
  20. </command>
  21. </epp>
  22. </xsl:template>
  23. </xsl:stylesheet>

然后java代码可以创建 Transformer 并使用例如。 transformer.setParameter("TLD", checkDomain.getTLD()) (见https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/transformer.html#setparameter-在调用 transform 方法。

展开查看全部

相关问题