java - 如何将 xslt 结果转换为 Java 对象?

标签 java xslt annotations

我有一个XML 文件:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <catalog>
      <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
      </cd>
    </catalog>

还有这个XSL 文件:

    <?xml version="1.0" ?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <xsl:value-of select="/catalog/cd/artist"/>
    <xsl:variable name = "artist" select = "/catalog/cd/artist()"/>
    <xsl:variable name="year" select="/catalog/cd/year()"/>
    <xsl:Object-bean  name="{$artist}" id="{$year}">

    </xsl:Object-bean>
    </xsl:template>

    </xsl:stylesheet>

现在我想将结果转换为 Java 类。

Java:

@XmlRootElement(name = "Object-bean")
@XmlAccessorType(XmlAccessType.NONE)
public class ObjectBean {
    @XmlAttribute(name = "name")
    private String name;
    @XmlAttribute
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

但是当我运行它时它显示了这个错误:

Error at xsl:Object-bean on line 7 column 49 of test.xsl:
  XTSE0010: Unknown XSLT element: Object-bean
Exception in thread "main" javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.
    at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:176)
    at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:139)
    at net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:91)
    at XslExecutor.main(XslExecutor.java:28)

最佳答案

XML 保存原始数据(文档 A)。 XSLT 是一个将 XML 数据(文档 A)转换为其他 XML 文档(文档 B)的转换模板。最后,您尝试将 XSLT 模板(文档 B)的输出编码为使用 JAXB 注释的 POJO。 JAXB 注释的工作方式类似于 XSLT 模板。它们提供了 XML 和 POJO 之间的绑定(bind)机制。

                  XSLT                           JAXB

(XML 文档 A)-------------------->(XML 文档 B)---------------- ----->POJO

这就是为了达成共识,您显示的输出表明 XSLT 转换失败。事实上,您提供的 XSL 是完全错误的。从这样的开始,它适用于您提供的 XML:

<?xml version="1.0" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">    
        <xsl:element name="Object-bean">
            <xsl:attribute name="artist">
                <xsl:value-of select="/catalog/cd/artist"/>
            </xsl:attribute>
            <xsl:attribute name="year">
                <xsl:value-of select="/catalog/cd/year"/>
            </xsl:attribute>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

关于java - 如何将 xslt 结果转换为 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17963279/

相关文章:

Java 可等待对象容器

java - 当我 tar 一个文件时,它的抛出异常为 "is too long ( > 100 bytes) TarArchiveOutputStream"

xslt - 找不到主类: org. apache.xalan.xslt.Process

hibernate - @EntityListener 是否也适用于 @MappedSuperclass?

java - 检查 3 个标准

java - 在 Java 中验证来自 RESTful 服务的 XML 响应的好方法是什么?

javascript - 如何使用 XSL 从 XML 创建可折叠的可扩展菜单树

xml - XSLT - 识别具有相同属性值模式的连续节点

java - 使用反射从界面获取注释

java - 如何使用 JUnit 测试我的@NotEmpty