Transform XHTML with XML::Saxon::XSLT2

tohuwawohu

I'm trying to get a simple XSLT 2.0 transformation running using perl and XML::Saxon::XSLT2. Here's what i've tried so far:

test.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>My Title</title>
    </head>
    <body>
        <p>My Content</p>
    </body>
</html>

test.xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

xslttest.pl:

use strictures;
use diagnostics;
use XML::Saxon::XSLT2;
use XML::LibXML;

my $parser = XML::LibXML->new;
my $xsl = 'test.xslt';
my $xslt = $parser->load_xml( location => $xsl );
my $dom = $parser->load_xml( location => 'test.xhtml' );
my $trans = XML::Saxon::XSLT2->new($xslt);
my $output = $trans->transform( $dom, 'xhtml' );
print $output;

Output of locate saxon9he.jar:

/usr/local/share/java/saxon9he.jar
/usr/share/java/saxon9he.jar

Now, if i run perl xslttest.pl, i get:

Uncaught exception from user code:

    A problem was encountered while attempting to compile and install your Inline
    Java code. The command that failed was:
      "/usr/lib/jvm/default-java/bin/javac" -deprecation  -d "/tmp/perltest/_Inline/lib/auto/XML/Saxon/XSLT2_dbc0" Transformer.java > cmd.out 2>&1

    The build directory was:
    /tmp/perltest/_Inline/build/XML/Saxon/XSLT2_dbc0

    The error message was:
    Transformer.java:1: error: package net.sf.saxon.s9api does not exist
    import net.sf.saxon.s9api.*;
    ^
    Transformer.java:29: error: cannot find symbol
        private XsltExecutable xslt;
                ^
      symbol:   class XsltExecutable
      location: class Transformer
    Transformer.java:30: error: cannot find symbol
        private Processor proc;
                ^
      symbol:   class Processor
      location: class Transformer
    Transformer.java:31: error: cannot find symbol
        private HashMap<String, XdmAtomicValue> params;
                                ^
    (...)

Perl version (result of perl -v):

This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
(with 41 registered patches, see perl -V for more detail)
(...)

Why does the transformation fail? It seems that Inline::Java fails to compile the required code (???), but how to avoid this?

EDIT:

The net.sf.saxon.s9api.* classes are provided by the saxon9he.jar itself:

$ jar tvf /usr/share/java/saxon9he.jar | grep net.sf.saxon.s9api
     0 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/
  1805 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/Axis.class
   302 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/BuildingContentHandler.class
   421 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/BuildingStreamWriter.class
  1207 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/BuildingStreamWriterImpl.class
  2025 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/ConstructedItemType.class
  1130 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/DOMDestination.class
   303 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/Destination.class
  1367 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/DocumentBuilder$BuildingContentHandlerImpl.class
  8981 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/DocumentBuilder.class
   455 Wed Aug 06 10:34:58 CEST 2014 net/sf/saxon/s9api/ExtensionFunction.class
(...)
tobyink

Your script works for me, and produces the following output:

<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>My Title</title>
   </head>
   <body>

      <p>My Content</p>

   </body>
</html>

(Though it's not exactly fast. I'd forgotten how slow Inline::Java stuff was.)

I have the following installed (on Ubuntu 14.04):

  • Perl 5.20
  • OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-4ubuntu1~0.14.04.2), installed in /usr/lib/jvm/java-7-openjdk-i386/
  • Saxon HE 9.5.1.7, located at /usr/share/java/saxon9he.jar
  • Inline::Java 0.53
  • XML::Saxon::XSLT2 0.007

Do you have similar versions? Did you install Inline::Java correctly (you need to set the JAVA_HOME environment variable). Did you run the tests that came with it? Did they pass? (If you used a CPAN client to install Inline::Java, it would normally run the test cases and only install the module if it passed, unless you explicitly override this behaviour.)

Similarly, did you run the test case that comes with XML::Saxon::XSLT2? Did it pass? (Because it does something fairly similar to your test script.)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XML :: Saxon :: XSLT2로 XHTML 변환

분류에서Dev

xml에서 xhtml로 : 빈 네임 스페이스 속성 추가 (xslt 2.0, saxon9he)

분류에서Dev

XSLT param identity transform without input XML

분류에서Dev

Using XSLT to transform old XML to new XML format

분류에서Dev

How to transform an XML adding a child node using XSLT?

분류에서Dev

saxon 구문 분석을 사용하여 입력 XML없이 XSLT 변환

분류에서Dev

Search and replace XML namespace prefix in XHTML+XML files in Eclipse

분류에서Dev

xslt2 값 포함

분류에서Dev

내 XML이 XHTML로 제공됩니다.

분류에서Dev

Compare values on xslt transform

분류에서Dev

Django Xhtml2PDF TypeError

분류에서Dev

wso2 esb xml transform은 grovvy를 지원합니까?

분류에서Dev

Saxon9HE API를 사용하여 Java 애플리케이션에서 XSLT로 여러 입력 XML 문서 변환

분류에서Dev

how to configure wso2esb to use Saxon 9.8 HE

분류에서Dev

Saxon HE로 이스케이프 된 XML 디코딩

분류에서Dev

xsl 내부의 <head> 요소 : 템플릿 무시 됨, XML, XSL, XHTML

분류에서Dev

DOCTYPE XSLT 2.0 Saxon9he에 ENTITY 선언 삽입

분류에서Dev

Invalid attribute name xmlns:xsl1 while validation XSL in Saxon XSLT parser

분류에서Dev

Saxon 및 EXSLT.org의 RegEx를 사용한 XSLT

분류에서Dev

Saxon XSLT2.0 문자열에서 숫자 추출

분류에서Dev

Saxon XSLT 프로세서로 줄 바꿈 방지

분류에서Dev

Saxon 9.8에서 가져온 XSLT 스타일 시트 URI

분류에서Dev

XSLT2에서 변수의 자식 선택

분류에서Dev

for-each-group 속성에 대한 XSLT2 컨텍스트

분류에서Dev

XSLT에 대해 잘 구성된 XHTML을 지원하는 방법

분류에서Dev

Multiple xml files transform using java to html file

분류에서Dev

MuleSoft - query database, transform and map to XML, write to file

분류에서Dev

문서가 application / xhtml + xml로 제공 될 때 SVG가 잘못 렌더링 됨

분류에서Dev

saxon : Saxon 9.1.0.7로 평가

Related 관련 기사

  1. 1

    XML :: Saxon :: XSLT2로 XHTML 변환

  2. 2

    xml에서 xhtml로 : 빈 네임 스페이스 속성 추가 (xslt 2.0, saxon9he)

  3. 3

    XSLT param identity transform without input XML

  4. 4

    Using XSLT to transform old XML to new XML format

  5. 5

    How to transform an XML adding a child node using XSLT?

  6. 6

    saxon 구문 분석을 사용하여 입력 XML없이 XSLT 변환

  7. 7

    Search and replace XML namespace prefix in XHTML+XML files in Eclipse

  8. 8

    xslt2 값 포함

  9. 9

    내 XML이 XHTML로 제공됩니다.

  10. 10

    Compare values on xslt transform

  11. 11

    Django Xhtml2PDF TypeError

  12. 12

    wso2 esb xml transform은 grovvy를 지원합니까?

  13. 13

    Saxon9HE API를 사용하여 Java 애플리케이션에서 XSLT로 여러 입력 XML 문서 변환

  14. 14

    how to configure wso2esb to use Saxon 9.8 HE

  15. 15

    Saxon HE로 이스케이프 된 XML 디코딩

  16. 16

    xsl 내부의 <head> 요소 : 템플릿 무시 됨, XML, XSL, XHTML

  17. 17

    DOCTYPE XSLT 2.0 Saxon9he에 ENTITY 선언 삽입

  18. 18

    Invalid attribute name xmlns:xsl1 while validation XSL in Saxon XSLT parser

  19. 19

    Saxon 및 EXSLT.org의 RegEx를 사용한 XSLT

  20. 20

    Saxon XSLT2.0 문자열에서 숫자 추출

  21. 21

    Saxon XSLT 프로세서로 줄 바꿈 방지

  22. 22

    Saxon 9.8에서 가져온 XSLT 스타일 시트 URI

  23. 23

    XSLT2에서 변수의 자식 선택

  24. 24

    for-each-group 속성에 대한 XSLT2 컨텍스트

  25. 25

    XSLT에 대해 잘 구성된 XHTML을 지원하는 방법

  26. 26

    Multiple xml files transform using java to html file

  27. 27

    MuleSoft - query database, transform and map to XML, write to file

  28. 28

    문서가 application / xhtml + xml로 제공 될 때 SVG가 잘못 렌더링 됨

  29. 29

    saxon : Saxon 9.1.0.7로 평가

뜨겁다태그

보관