由于名称空间

时间:2015-12-02 16:37:16

标签: xml perl xpath xml-namespaces xml-libxml

我使用XML :: XPath来解析xml文件,但没遇到任何问题。由于几个原因(没有混淆(?),慢慢地,参见例如here)我尝试XML :: LibXML但没有成功。问题似乎是在xml文件的根目录中。以下代码确实有效:

use strict; 
use warnings;
use XML::LibXML;

my $prsr = XML::LibXML->new();
$prsr->keep_blanks(0);
my $xp = $prsr->parse_fh(\*DATA);

my @node_article = $xp->findnodes('/ARTICLE/*');

foreach my $node (@node_article) {
    print "$node\n\n";
}

__DATA__
  <ARTICLE xmlns:xsd="http://whatever" xmlns:xsi="http://whatever">
    <EVENT name="cat1" />  
    <EVENT name="cat2" />  
    <EVENT name="cat3" />  
    <EVENT name="cat4" />  
    <EVENT name="cat5" />  
  </ARTICLE>

enter image description here

但是如果root包含默认命名空间xmlns =“http:// whatever”上面的代码不起作用(没有输出到终端)。

__DATA__
  <ARTICLE xmlns:xsd="http://whatever" xmlns:xsi="http://whatever" xmlns="http://whatever">
    <EVENT name="cat1" />  
    <EVENT name="cat2" />  
    <EVENT name="cat3" />  
    <EVENT name="cat4" />  
    <EVENT name="cat5" />  
  </ARTICLE>

一种解决方案可能是删除(手动)命名空间,但我想避免这种情况,因为原始文件将被定期下载和导入。所以,我有两个问题:

  1. 为什么命名空间确实会导致使用XML :: LibXML而不是使用XML :: XPATH
  2. 时出现问题
  3. 如何使用XML :: LibXML解决此问题?
  4. 感谢您的帮助。

0 个答案:

没有答案