xsl-list
[Top] [All Lists]

[xsl] Namespaces in output

2021-09-22 08:43:43
I am processing html exported from InDesign documents. As such, Every html 
document comes with the standard doctype and namespace declarations: 

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml";>

In the past, I have skirted the namespace tangle by manually removing the 
doctype and replacing <html xmlns="http://www.w3.org/1999/xhtml”;> with an 
element name that the Oxygen xslt engine would not quibble about, such as 
<mybook>. Since I have too many documents to transform, I have left the doctype 
and html/namespace in place and modified the stylesheet namespace declarations 
like this:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
    version="3.0" 
    xmlns="http://www.w3.org/1999/xhtml"; 
    xpath-default-namespace="http://www.w3.org/1999/xhtml"; 
    xmlns:map="http://www.w3.org/2005/xpath-functions/map"; 
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
    xmlns:saxon="http://saxon.sf.net/"; 
    exclude-result-prefixes="xs map #default saxon"> 


Well and good. I can address the html elements directly in my stylesheet. 
However, the namespace http://www.w3.org/1999/xhtml appears in the root level 
element of all output documents:

<div xmlns="http://www.w3.org/1999/xhtml"; class="apE">
    <p class="subhead_ap_topic">2.2 Yada Yada</p>
    <p class="subhead_ap_h2">Yuda</p>
    <p class="body_first">NNNN</p>
    <p class="subhead_ap_h4">MMMM</p>
    <p class="body_text">PPPP</p>
</div>

When I remove the namespace at the root level using <xsl:element name=“div” 
namespace="">, the http://www.w3.org/1999/xhtml namespace appears on all child 
elements:

<div class="apE">
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_topic">2.2 Yada 
Yada</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_h2">Yuda</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="body_first">NNNN</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_h4">MMMM</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="body_text">PPPP</p>
</div>

My question: Is it possible to remove all namespaces from my result 
documents—short of selecting * and rebuilding all elements using <xsl:element 
namespace=“”>? These namespace declarations don’t hamper the display of the 
resulting documents. However, text is text and the extra load, over pages and 
pages of such output can’t but add time to rendering pages. Of course, having 
one namespace declaration at the root level is preferable to having all child 
elements carrying a ns. 

Any help in this would be appreciated. 

Terry
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>