Re: [xml] Fwd: continued problem with Python, libxml2 and entities
- From: "Bidoul, Stephane" <Stephane Bidoul softwareag com>
- To: "Mike Kneller" <ukchill mac com>, <xml gnome org>
- Subject: Re: [xml] Fwd: continued problem with Python, libxml2 and entities
- Date: Mon, 29 Jan 2007 16:00:16 +0100
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: xml-bounces gnome org [mailto:xml-bounces gnome org] On
Behalf Of Mike Kneller
Sent: lundi 29 janvier 2007 15:29
To: xml gnome org
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" <ukchill mac com>
To: <xml gnome org>
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
ukchill mac com
http://www.mikekneller.com
_______________________________________________
xml mailing list, project page http://xmlsoft.org/ xml gnome org
http://mail.gnome.org/mailman/listinfo/xml
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml gnome org http://mail.gnome.org/mailman/listinfo/xml
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]