【问题标题】:Namespace error while parsing xml namespace with multiple URIs in perl在 perl 中解析具有多个 URI 的 xml 命名空间时出现命名空间错误
【发布时间】:2019-02-21 00:43:32
【问题描述】:
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 perl xml-libxml


    【解决方案1】:

    为 XML 1.0 命名空间名称提供多个 URI 是不合法的语法。很难想象你的意思是什么

    Namespaces in XML 1.0 (Third Edition) 这么说

    属性的规范化值必须是一个 URI 引用——标识命名空间的命名空间名称——或者一个空字符串

    【讨论】:

    • 我无法完全理解你在说什么。我可以在网上看到一些验证器不会为上述 xml 抛出错误,但其中一些会抛出错误。
    • @andor:XML 1.0 规范只允许URI 引用。您发现的允许您的 XML 的验证器不完整,并且没有正确验证命名空间。传递两个 URI 时你的意思是什么?命名空间缩写不能同时代表两个命名空间!
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多