Folks,
We have got some strange behavior while dealing with XSP pages containing
a lot of nested/scoped xml:lang attributes as well as XML-Namaspaces
(which are not used for taglibs but simply to differentiate tags into the
XSLT space).
foo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
<page version="1.0" xml:lang="en" xhtml="http://www.w3.org/1999/xhtml">
<pagetitle xml:lang="en">English</pagetitle>
<sourceLanguage>en</sourceLanguage>
<sentence>
<key xml:lang="en">key1</key><value xml:lang="en">test
in English</value>
</sentence>
</page>
is processed fine; and yields (full output a the end of this message):
.. cut..
<body>
<h1>test in English</h1>
</body>
.. cut..
when (full xsl at the end of this msg):
<xsl:template match="*" mode="body">
<body>
<h1><xsl:value-of select="//sentence[key='key1']/[EMAIL
PROTECTED]:lang='en']" disable-output-escaping="yes"/></h1>
</body>
is applied but this XSP:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="NULL" type="application/x-xsp" ?>
<?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
<xsp:page
xmlns:xsp="http://apache.org/xsp/core/v1"
xmlns:param="http://axkit.org/NS/xsp/param/v1"
>
<page version="1.0" xml:lang="en"
xmlns:xhtml="http://www.w3.org/1999/xhtml" >
<pagetitle xml:lang="en">English</pagetitle>
<sourceLanguage>en</sourceLanguage>
<sentence>
<key xml:lang="en">key1</key><value xml:lang="en">test
in English</value>
</sentence>
</page>
</xsp:page>
(page .. /page byte by byte the same as in the xml file) yields:
<body>
<h1></h1>
</body>
without the key value. Using AxTraceIntermediate we can see xml:lang
beeing preserved (see end of file for those internediate files).
We find that things do work if we
- remove any xmlns:foo namespace we define
- put the tags in a flat namespace (we're NOT using taglibs)
- and do an overall 's/xml:lang/lang/g'
To us it looks like a bug into the AxKit XML NS processing code and/or in
relation to xml:lang (is that very special to AxKit?) - it seems there is
a mention something about it into TODO of 1.62 though. Any immediate hint
or patch to apply ? (We tried on FreeeBSD and MacOSX).
Any pointers or suggestions as how to solve this ?
Dw
Full stylesheet:
<?xml version="1.0" ?>
<xsl:stylesheet
version="1.0"
xml:lang="en"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
omit-xml-declaration="yes" media-type="text/html" />
<xsl:variable name="sourceLanguage"><xsl:value-of
select="/page/sourceLanguage"/></xsl:variable>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<xsl:apply-templates select="." mode="header" />
<xsl:apply-templates select="." mode="body" />
</html>
</xsl:template>
<xsl:template match="*" mode="header">
<head>
<title><xsl:value-of select="./pagetitle"/></title>
</head>
</xsl:template>
<xsl:template match="*" mode="body">
<body>
<h1><xsl:value-of select="//sentence[key='key1']/[EMAIL
PROTECTED]:lang='en']" disable-output-escaping="yes"/></h1>
</body>
</xsl:template>
</xsl:stylesheet>
corect HTML from .xml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>English</title>
</head>
<body>
<h1>test in English</h1>
</body>
</html>
broken output from .xsp:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>English</title>
</head>
<body>
<h1></h1>
</body>
</html>
Intermediat files
foo.xsp.0
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="NULL" type="application/x-xsp" ?>
<?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
<xsp:page
xmlns:xsp="http://apache.org/xsp/core/v1"
xmlns:param="http://axkit.org/NS/xsp/param/v1"
>
<page version="1.0" xml:lang="en" xmlns:xhtml="http://www.w3.org/1999/xhtml" >
<pagetitle xml:lang="en">English</pagetitle>
<sourceLanguage>en</sourceLanguage>
<sentence>
<key xml:lang="en">key1</key><value xml:lang="en">test in
English</value>
</sentence>
</page>
</xsp:page>
foo.xsp.1
<?xml version="1.0" encoding="UTF-8"?>
<page version="1.0" xml:lang="en"
xhtml="http://www.w3.org/1999/xhtml"><pagetitle
xml:lang="en">English</pagetitle><sourceLanguage>en</sourceLanguage><sentence><key
xml:lang="en">key1</key><value xml:lang="en">test in
English</value></sentence></page>
foo.xsp.2
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xml:lang="en"><head><title>English</title></head><body><h1></h1></body></html>
foo.xsp.XSP
package
Apache::AxKit::Language::XSP::ROOT::usr::local::www::data::www_2dchinglish::mockup::login::data::tmp2::foo_2exsp;
use Apache;
use Apache::Constants qw(:common);
use XML::LibXML;
Apache::AxKit::Language::XSP::Page->import( qw(__mk_text_node
__mk_comment_node __mk_ns_element_node __mk_element_node) );
use utf8;#initialize xsp namespace
#initialize xsp namespace
@Apache::AxKit::Language::XSP::ROOT::usr::local::www::data::www_2dchinglish::mockup::login::data::tmp2::foo_2exsp::ISA
= ('Apache::AxKit::Language::XSP::Page');
sub xml_generator {
my $class = shift;
my ($r, $cgi, $document, $parent) = @_;
$parent = __mk_element_node($document, $parent, q|page|);
$parent->setAttribute(q|version|,q|1.0|);
$parent->setAttribute(q|xml:lang|,q|en|);
$parent->setAttribute(q|xhtml|,q|http://www.w3.org/1999/xhtml|);
$parent = __mk_element_node($document, $parent, q|pagetitle|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|English|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|sourceLanguage|);
__mk_text_node($document, $parent, q|en|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|sentence|);
$parent = __mk_element_node($document, $parent, q|key|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|key1|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|value|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|test in English|);
$parent = $parent->getParentNode;
$parent = $parent->getParentNode;
$parent = $parent->getParentNode;
return OK;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]