2013-07-31 37 views
6

Tôi có một file XML:Làm thế nào để chuyển đổi kết quả XSLT vào java đối tượng

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

tập tin này 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> 

Bây giờ tôi muốn chuyển kết quả vào java lớp học.

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; 
    } 
} 

nhưng khi tôi chạy nó nó chỉ cho tôi lỗi này:

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) 

xin vui lòng giúp đỡ càng sớm càng tốt.

Trả lời

1

XML giữ dữ liệu gốc (Tài liệu A). XSLT là một mẫu chuyển đổi dịch dữ liệu XML (Document A) sang tài liệu XML khác (Document B) .Và cuối cùng bạn đang cố gắng kết hợp đầu ra của mẫu XSLT (Document B) vào một POJO được chú thích bằng JAXB. Chú thích JAXB hoạt động tương tự như mẫu XSLT. Chúng cung cấp một cơ chế ràng buộc giữa XML và POJO.

    XSLT       JAXB 

(Tài liệu XML A) ---------------------> (Tài liệu XML B) ----------- ---------> POJO

Điều đó giải thích, chỉ để thiết lập một sự hiểu biết chung, đầu ra bạn đang hiển thị cho biết việc chuyển đổi XSLT là không thành công. Trong thực tế, XSL bạn cung cấp là hoàn toàn sai. Bắt đầu với một cái gì đó như thế này, hoạt động với XML bạn đã cung cấp:

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

Lý do xảy ra lỗi là mẫu xslt không chính xác của bạn. Bạn muốn đạt được điều gì bằng cách áp dụng phép chuyển đổi xslt? Nếu làm như vậy bạn muốn xây dựng POJO thì không phải là ý hay ..

Lúc đầu, bạn phải chuyển đổi tệp xml ban đầu của mình bằng mẫu xslt và sau này bạn phải xml không cân bằng với POJO bằng JAXB.

+0

có đó là những gì tôi muốn. – user2335004

Các vấn đề liên quan