2013-07-31 10 views
6

Mam plik XML:Jak przekształcić wynik XSLT do obiektów Java

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

i to XSL pliku:

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

Teraz chcę przekształcić wyniku w java klasa.

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

ale kiedy go uruchomić to pokaż mi ten błąd:

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) 

proszę o pomoc jak najszybciej.

Odpowiedz

1

Kod XML zawiera oryginalne dane (dokument A). XSLT jest szablonem transformacji, który tłumaczy dane XML (Dokument A) na inny dokument XML (Dokument B). I na koniec próbujesz przekazać dane wyjściowe szablonu XSLT (Dokument B) do POJO z adnotacją JAXB. Adnotacje JAXB działają podobnie do szablonu XSLT. Zapewniają mechanizm wiążący między XML a POJO.

    XSLT       JAXB 

(Dokument XML A) --------------------- (Dokument XML B) ----------- ---------> POJO

Wyjaśniono, że w celu ustalenia wspólnej interpretacji, dane wyjściowe, które są wyświetlane, informują, że transformacja XSLT zawodzi. W rzeczywistości dostarczony XSL jest całkowicie błędny. Zacznij od czegoś podobnego, które działa z podanym przez Ciebie kodem 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

Przyczyną błędu jest nieprawidłowy szablon xslt. Co chcesz osiągnąć przez zastosowanie transformacji xslt? Jeśli robiąc to, chcesz zbudować POJO, to nie jest dobry pomysł.

Najpierw musisz przekształcić swój początkowy plik xml w szablon xslt, a potem musisz wydobyć nieprzyjemny xml do swojego POJO używając JAXB.

+0

Tak, właśnie tego chcę. – user2335004

Powiązane problemy