【发布时间】:2013-06-25 01:29:12
【问题描述】:
我正在使用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>
我需要能够评估包含在selector 中的XPath 表达式,变量的值是its:param 元素的内容。我不知道如何做到这一点。 XML::XPath 的文档提到了变量(我假设它应该是上下文的一部分),它甚至有一个类来表示它们,但是文档没有说明如何在上下文中指定变量。如果可能的话,我会更加不确定如何从 XML::Twig 访问这些功能。
有人知道怎么做吗?或者,您能否举例说明如何将此类功能与另一个模块一起使用,例如 XML::LibXML(它广泛提及变量,但让我有点不确定如何使用字符串变量执行此操作)?
【问题讨论】:
-
XPath 变量对我来说是一个陌生的领域,但我看到的一种天真的方法就是将
$LCID替换为来自its:param的值,如下所示:$selector =~ s/[$]LCID/$lcid/。 -
我在考虑这个,但不确定这是否是一个强大的解决方案。关于变量here 的文档似乎表明变量可能不仅仅是要插入的字符串,但 ITS 参数可能只是字符串(在这种情况下,我认为这也需要引号:
$selector =~ s/[$]LCID/'$lcid'/)。也许这是我的特权,因为 ITS 文档说“[实现者应该]定义变量如何绑定以评估选择器表达式”。 -
如果值包含引号怎么办?您需要的不仅仅是引号。
-
再看一下its:doc,我确信它不允许所有的XPath 变量(可以保存任何对象),而且我只需要担心字符串。不过,我将把这个问题留在这里,因为我想知道如何在 XML::Twig 或 XML::XPath 中将变量添加到上下文中。
标签: xml perl xpath xml-twig xml-libxml