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

XML :: Twig或其他中的XPath变量

发布时间:2020-12-16 23:00:37 所属栏目:百科 来源:网络整理
导读:我正在使用 XML::Twig::XPath来处理ITS数据,并试图弄清楚如何使用变量来解析XPath表达式.以下是我需要与ITS spec合作的一个例子: its:rules version="2.0" its:param name="LCID"0x0409/its:param its:translateRule selector="//msg[@lcid=$LCID]" transla
我正在使用 XML::Twig::XPath来处理ITS数据,并试图弄清楚如何使用变量来解析XPath表达式.以下是我需要与ITS spec合作的一个例子:

<its:rules version="2.0">
  <its:param name="LCID">0x0409</its:param>
  <its:translateRule selector="//msg[@lcid=$LCID]" translate="yes"/>
</its:rules>

我需要能够评估选择器中包含的XPath表达式,变量的值是其:param元素的内容.我不知道如何做到这一点. XML::XPath的文档提到变量(我假设它应该是上下文的一部分),它甚至有一个表示它们的类,但是文档没有说明如何在上下文中指定变量.如果可能的话,我会更加不确定如何从XML :: Twig访问这样的功能.

有谁知道如何做到这一点?或者,您是否可以举例说明如何将这些功能与另一个模块一起使用,例如XML :: LibXML(广泛提及变量,但是对于如何使用字符串变量这样做有点不确定)?

解决方法

libxml2和XML :: LibXML支持XPath 2.0路径及其变量.

use XML::LibXML               qw( );
use XML::LibXML::XPathContext qw( );

sub dict_lookup {
   my ($dict,$var_name,$ns) = @_;
   $var_name = "{$ns}$var_name" if defined($ns);
   my $val = $dict->{$var_name};
   if (!defined($val)) {
      warn("Unknown variable "$var_name"n");
      $val = '';
   }

   return $val;
}

my $xml = <<'__EOI__';
<r>
<e x="a">A</e>
<e x="b">B</e>
</r>
__EOI__

my %dict = ( x => 'b' );

my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($xml);

my $xpc = XML::LibXML::XPathContext->new();
$xpc->registerVarLookupFunc(&;dict_lookup,%dict);

say $_->textContent() for $xpc->findnodes('//e[@x=$x]',$doc);

(编辑:李大同)

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

    推荐文章
      热点阅读