Search code examples
xmlperlxml-libxml

Namespace error while parsing xml namespace with multiple URIs in perl


use XML::LibXML;

use strict;
use warnings;

my $parser = XML::LibXML->new();
my $xmldata = '<?xml version="1.0" encoding="utf-8"?><Research xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.rixml.org/2013/2/RIXML" xmlns:schemaLocation="http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd" xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd" language="eng"></Research>';

my $respDom = $parser->parse_string($xmldata);
print $respDom;

This is the error I get. Does XML::LibXML not support multiple URIs in namespaces?

Error(s), warning(s):
:1: namespace error : xmlns:schemaLocation: 'http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd' is not a valid URI
ml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd"
                                                                                ^
:1: namespace error : xmlns:rixmldt: 'http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd' is not a valid URI
datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd"
                                                                                ^

XML reformatted

<?xml version="1.0" encoding="utf-8"?>
<Research
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.rixml.org/2013/2/RIXML"
    xmlns:schemaLocation="http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd"
    xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd"
    language="eng">
</Research>

Solution

  • Supplying multiple URIs for an XML 1.0 namespace name isn't legitimate syntax. It is hard to imagine what you may mean by it

    Namespaces in XML 1.0 (Third Edition) says this

    The attribute's normalized value MUST be either a URI reference — the namespace name identifying the namespace — or an empty string