如何转换的XSLT结果为Java对象?

问题描述 投票:5回答:2

我有一个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)
java xslt annotations
2个回答
1
投票

该XML持有的原始数据(文件A)。该XSLT是一个转换模板的XML数据(文档A)转换成其它XML文档(文档B)。而最后你试图马歇尔的XSLT模板(文档B)的输出与JAXB注释一个POJO。 JAXB注释的工作原理类似于XSLT模板。它们提供XML和POJO之间的绑定机制。

                  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>

0
投票

错误的原因是你的不正确的XSLT模板。你想要什么应用XSLT转换来实现呢?如果这样做,你想建立POJO是不是一个好主意..

首先,你必须用XSLT模板将您最初的XML文件,并在这之后,你必须组XML使用JAXB您的POJO。

© www.soinside.com 2019 - 2024. All rights reserved.