xml – 为什么我从getElementsByTagName获得“无效谓词”错误?

前端之家收集整理的这篇文章主要介绍了xml – 为什么我从getElementsByTagName获得“无效谓词”错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下 XML

<config>
  <version general="1.2.3">
    <subtype type="a" version="1.2" />
    <subtype type="b" version="3.6" />
    ...
  </version>
  ...
</config>

我在Perl中有一些代码来从数据库获取配置节点.

在我得到它后,如果我尝试以下方法

my $elem = $cfg->getElementsByTagName("version");
my $generalVer = $elem ? $elem->get_node(1)->getAttribute("general") : undef;

一切正常,$generalVer包含1.2.3,正如预期的那样.

但如果我试试这个:

my $elem = $cfg->getElementsByTagName("version/subtype[@type='a']");
my $aVersion = $elem ? $elem->get_node(1)->getAttribute("version") : undef;

它失败并显示“无效谓词”消息.

有人可以帮助解决这个问题吗?

解决方法

我强烈怀疑“版本/子类型[@type =’a’]”实际上不是标签名称.这看起来像一个XPath查询.

我假设你使用像XML::DOM这样的东西来解析这个XML.如果你想使用XPath,那么你可以使用XML::DOM::XPath,它增加了XPath支持.

例如,

use XML::DOM;
 use XML::DOM::XPath;
 ...
 my $elem = $cfg->findnodes( q{//version/subtype[@type='a']} );

猜你在找的XML相关文章