在 perl 中使用多个 URI 解析 xml 名称空间时出现名称空间错误
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;
这是我得到的错误。 XML::LibXML
不支持名称空间中的多个 URI 吗?
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 重新格式化
<?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>
为 XML 1.0 命名空间名称提供多个 URI 是不合法的语法。很难想象你的意思
Namespaces in XML 1.0 (Third Edition) 这样说
The attribute's normalized value MUST be either a URI reference — the namespace name identifying the namespace — or an empty string
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;
这是我得到的错误。 XML::LibXML
不支持名称空间中的多个 URI 吗?
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 重新格式化
<?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>
为 XML 1.0 命名空间名称提供多个 URI 是不合法的语法。很难想象你的意思
Namespaces in XML 1.0 (Third Edition) 这样说
The attribute's normalized value MUST be either a URI reference — the namespace name identifying the namespace — or an empty string