Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3
Added by Cory Madden over 2 years ago
Hi There,
I have noticed that with Saxon 11.3 adds extra namespace attributes to the children elements when using xsl:mode. XSL
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ou="http://omniupdate.com/XSL/Variables"
xmlns:fn="http://omniupdate.com/XSL/Functions"
xmlns:ouc="http://omniupdate.com/XSL/Variables"
exclude-result-prefixes="xsl xs ou fn ouc">
<xsl:output method="html" version="5.0" indent="yes" encoding="UTF-8" />
<xsl:mode on-no-match="shallow-copy" />
<xsl:template match="ouc:*">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/document">
<html>
<body>
<xsl:apply-templates select="ouc:div[@label='mylabel']" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:ouc="http://omniupdate.com/XSL/Variables">
<ouc:div label="mylabel" group="Everyone">
<div class="item-9">
<h1>This should output</h1>
</div>
</ouc:div>
</document>
The problem
The xmlns:ouc="http://omniupdate.com/XSL/Variables" is being added to the
Replies (6)
Please register to reply
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Cory Madden over 2 years ago
Correcting my statement:
The xmlns:ouc="http://omniupdate.com/XSL/Variables" is being added to the first child div
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Martin Honnen over 2 years ago
xsl:mode on-no-match="shallow-copy"
does an identity transformation where in scope namespace nodes are copied too, so the xmlns:ouc="..."
which is in scope from the ancestor declaration is output on the div
child correctly, by the serializer, in my view, as no ancestor was copied.
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Michael Kay over 2 years ago
Saxon's output here is definitely correct: shallow copy of an element, whether done explicitly using xsl:copy or implicitly using the built-in template rule, is required to copy all the in-scope namespaces of the element being copied.
I've run it under 9.7 and that appears to deliver the same (correct) result.
If you want to drop unused namespaces, try adding a fallback template rule
<xsl:template match="*">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Cory Madden over 2 years ago
Thank you for the comments. I took my example code and processed it through Saxon 9.7.0.2 and Saxon 11.3. The xsl:mode on-no-match="shallow-copy" works differently in the two versions.
In Saxon 9.7.0.2: (example page https://cory-gallena.oudemo.com/testing.html does contain some of our system code at the bottom of the HTML)
<!DOCTYPE HTML>
<html>
<body>
<div class="item-9">
<h1>This is output with Saxon 9.7.0.2</h1>
</div>
</body>
</html>
In Saxon 11.3: (example https://program-examples.oudemo.com/xsl-question/test.html does contain some of our system code)
<!DOCTYPE HTML>
<html>
<body>
<div xmlns:ouc="http://omniupdate.com/XSL/Variables" class="item-9">
<h1>This should output</h1>
</div>
</body>
</html>
Full code example (with our system code) XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ou="http://omniupdate.com/XSL/Variables"
xmlns:fn="http://omniupdate.com/XSL/Functions"
xmlns:ouc="http://omniupdate.com/XSL/Variables"
exclude-result-prefixes="xsl xs ou fn ouc">
<xsl:output method="html" version="5.0" indent="yes" encoding="UTF-8" />
<xsl:mode on-no-match="shallow-copy" />
<xsl:template match="processing-instruction('pcf-stylesheet')" mode="#all" />
<xsl:template match="ouc:*">
<xsl:apply-templates mode="#current" />
</xsl:template>
<xsl:template match="/document">
<html>
<body>
<xsl:apply-templates select="ouc:div[@label='mylabel']" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?pcf-stylesheet path="/common.xsl" extension="html" ?>
<document xmlns:ouc="http://omniupdate.com/XSL/Variables">
<ouc:div label="mylabel" group="Everyone">
<div class="item-9">
<h1>This is output with Saxon 11.3</h1>
</div>
</ouc:div>
</document>
Can you confirm this the new desired behavior?
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Michael Kay over 2 years ago
The behaviour changed in Saxon 9.7.0.6 as a result of fixing bug #2767 - see https://saxonica.plan.io/issues/2767
RE: Extra xmlns attributes being added to children elements - Java Saxon-EE 11.3 - Added by Cory Madden over 2 years ago
Thank you for the clarification! I will inform our team of this change, I will repost if they have any additional questions.
Please register to reply