-
xslt + xi:include
Bonjour,
Je cherche à inclure le contenu d'un fichier dans un autre à l'aide de xinclude.
Je manque d'expérience dans le domaine et ne sais pas comment m'y prendre !
>> test.xml (pour include test2.xml)
<?xml version="1.0" encoding="UTF-8"?>
<test>
mytest
<xi:include href="test2.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</test>
>> test2.xml
<?xml version="1.0" encoding="UTF-8"?>
<test2>
mytest2
</test2>
>> test.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
>> ant.xml
<project name="mytest" default="test" basedir=".">
<path id="xalan.classpath">
<fileset dir="lib" id="xalan.fileset">
<include name="xalan.jar" />
<include name="xercesImpl.jar" />
<include name="serializer.jar" />
</fileset>
</path>
<target name="test">
<mkdir dir="tmp"/>
<delete file="tmp/test.html"/>
<xslt style="test.xsl" extension=".out" basedir="." destdir="tmp">
<classpath refid="xalan.classpath" />
<include name="test.xml" />
</xslt>
</target>
</project>
-
J'ai résolu le problème en changeant de processeur : de xalan à xsltptoc. En effet, ce dernier dispose de l'option '--xinclude' alors qu'avec xalan, il faut à priori utiliser un autre outil en amont pour faire le boulot !
# mydoc.xml
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xi="http://www.w3.org/2001/XInclude">
mytest
<xi:include href="mysubdoc.xml" parse="xml"/>
</test>
# mysubdoc.xml
<?xml version="1.0" encoding="UTF-8"?>
<test2>
mytest2
</test2>
# test.xsl
<?xml version="1.0" encoding="ASCII"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="@*">
<xsl:copy />
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" >
<xsl:apply-templates select="* | text() | @*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
# build.xml (ant)
<?xml version="1.0"?>
<project name="xslt-test" default="test" basedir=".">
<target name="test">
<exec dir="." executable="xsltproc.exe" output="tmp/mydoc.html">
<arg line="--xinclude test.xsl mydoc.xml"/>
</exec>
</target>
</project>