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

如何将xslt结果转换为Java对象?,java,xslt,annotations,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>

我有一个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>
    <?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>
但当我运行它时,它会显示以下错误:

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)

错误的原因是xslt模板不正确。您希望通过应用xslt转换实现什么?如果你想通过这样做来构建POJO,这不是一个好主意


首先,您必须使用xslt模板转换初始xml文件,然后使用JAXB将xml解组到POJO

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>

<?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>