【问题标题】:xml with namespace not getting parsed in perl带有命名空间的xml没有在perl中被解析
【发布时间】:2023-03-12 22:45:01
【问题描述】:

我有一个带有默认命名空间的 xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://127.0.0.1 GrammarXSD.xsd" version="01.00" xmlns="GrammarXSD.xsd">
    <DataModel>
        #rest of the xml
    </DataModel>
</start>

为了解析这个 xml,我尝试使用以下代码注册命名空间:

my $file = "xml file location";
my $dom = XML::LibXML->load_xml(location => $file);
my $xpc = XML::LibXML::XPathContext->new($dom->documentElement());
$xpc->registerNs('ns',  'GrammarXSD.xsd');
my $b = $dom->findnodes('//ns:DataModel');

但是,这并没有按预期找到 DataModel 节点。 GrammarXSD.xsd 文件与 xml 位于同一位置。

我在这里错过了什么?

【问题讨论】:

标签: xml perl libxml2 xml-libxml


【解决方案1】:

您必须使用 XPathContext 对象以可识别名称空间的方式搜索节点:

my $data_models = $xpc->findnodes('//ns:DataModel', $dom);

顺便说一句,不要使用my $b,$b 是sort 中使用的特殊变量,如果稍后在同一范围内使用sort,将其声明为词法可能会导致错误。

此外,命名空间 URI 没有任何意义,它只是标识命名空间。

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2018-12-07
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多