加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:26:39 所属栏目:百科 来源:网络整理
导读:我有以下 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-getElem
我有以下 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']} );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读