in reply to Re^3: copyCurrentNode in XML::LibXML::Reader will add xmlns attribute ( setNamespaceDeclURI )
in thread copyCurrentNode in XML::LibXML::Reader will add xmlns attribute
XML::LibXML defines setNamespace in the following way:
sub setNamespace { my $self = shift; my $n = $self->nodeName; if ( $self->_setNamespace(@_) ){ if ( scalar @_ < 3 || $_[2] == 1 ){ $self->setNodeName( $n ); } return 1; } return 0; }
where _setNamespace comes from its XS component, the important part (I guess) is the following:
if ( nsPrefix == NULL && nsURI == NULL ) { /* special case: empty namespace */ if ( (ns = xmlSearchNs(node->doc, node, NULL)) && ( ns->href && xmlStrlen( ns->href ) != 0 ) ) { /* won't take it */ RETVAL = 0; } else if ( flag ) { /* no namespace */ xmlSetNs(node, NULL); RETVAL = 1; } else { RETVAL = 0; } }
setNamespace returns 1, so I guess it goes the "else if" branch, but the namespace isn't removed from the node. xmlSetNs comes from libxml2 and is defined as (debugging ifdefs removed)
void xmlSetNs(xmlNodePtr node, xmlNsPtr ns) { if (node == NULL) { return; } if ((node->type == XML_ELEMENT_NODE) || (node->type == XML_ATTRIBUTE_NODE)) node->ns = ns; }
Anyone can explain why the namespace isn't changed?
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: copyCurrentNode in XML::LibXML::Reader will add xmlns attribute ( setNamespaceDeclURI )
by beech (Parson) on Sep 20, 2017 at 18:18 UTC | |
by choroba (Cardinal) on Sep 30, 2017 at 09:59 UTC | |
by choroba (Cardinal) on Oct 01, 2017 at 20:09 UTC |