Mike, You should tell libxml2 to resolve entities before doing any XSLT processing. In your test.py, use
sourcedoc = libxml2.readFile( 'test.xml', None, libxml2.XML_PARSE_NOENT ) If you look at pyxsltproc.py you will see that it does the same trick with a global setting ( libxml2.substituteEntitiesDefault(1) ) but I believe this way of doing is deprecated. -sbi > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Mike Kneller > Sent: lundi 29 janvier 2007 15:29 > To: [email protected] > Subject: [xml] Fwd: continued problem with Python, libxml2 > and entities > > It turns out that the same transform run through xsltproc > gives the correct result. > > What I am expecting to see is: > <?xml version="1.0"?> > <content> > <p>(c)2007</p> > </content> > > When I run it using test.py, the result I get is: > <?xml version="1.0"?> > <content> > <p>2007</p> > </content> > > So, as the xsltproc version gives me the correct result, I > guess I can eliminate the library as the source of the > problem, instead it would appear to be a problem with my > Python code, or the Python wrapper. > > Any ideas? > > Mike > > > >From: "Mike Kneller" <[EMAIL PROTECTED]> > >To: <[email protected]> > >Date: January 28, 2007 09:26:40 AM PST > >Subject: [xml] continued problem with Python, libxml2 and entities > > > >The continuing saga! > > > >I seem to have moved the entity issue from libxml2 to libxslt... > > > >Using the following testcase (using a standard identity > >transformation) now loses the entity. > > > >replacing <xsl:copy> with <xsl:copy-of> on the <p> node > produces output > >with the entity, as does using <xsl:value-of> on the same node. > > > >===test.py=== > >import libxml2 > >import libxslt > > > >sourcedoc = libxml2.parseFile( 'test.xml' ) styledoc = > >libxml2.parseFile( 'test.xsl' ) style = > >libxslt.parseStylesheetDoc(styledoc) > >result = style.applyStylesheet(sourcedoc, None) print > >style.saveResultToString( result ) > >style.freeStylesheet() > >result.freeDoc() > >sourcedoc.freeDoc() > > > > > >===test.xml=== > ><?xml version="1.0"?> > ><?xml-stylesheet type="text/xsl" href="test.xsl" ?> > > > ><!DOCTYPE content [ > > <!ENTITY copy "©"> > >]> > > > ><content> > > <p>©2007</p> > ></content> > > > > > >===test.xsl=== > ><?xml version="1.0"?> > ><xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > > > > > ><xsl:template match="/"> > > <xsl:apply-templates match="." /> > ></xsl:template> > > > ><xsl:template match="@*|node()"> > > <xsl:copy> > > <xsl:apply-templates select="@*|node()"/> > > </xsl:copy> > ></xsl:template> > > > ></xsl:stylesheet> > > > > > >Cheers > >Mike Kneller > >[EMAIL PROTECTED] > >http://www.mikekneller.com > > > >_______________________________________________ > >xml mailing list, project page http://xmlsoft.org/ [email protected] > >http://mail.gnome.org/mailman/listinfo/xml > > > > > _______________________________________________ > xml mailing list, project page http://xmlsoft.org/ > [email protected] http://mail.gnome.org/mailman/listinfo/xml > _______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
