【问题标题】:Perl XML:LibXML - Dynamic NodePerl XML:LibXML - 动态节点
【发布时间】:2020-06-24 21:29:06
【问题描述】:

我一直在尝试用 perl 解析一个 xml。我有一个正常工作的静态树路径。但是,并非每个节点在不同的 xml 文件之间都保持相同。

我有这个代码。

foreach my $travelSections ($dom->findnodes('//TRAVELER[@NAME="Final Assembly - 1/16-Traveler"]/...')){

问题是 xml 到 xml 这会更改“Final Assembly - 1/16-Traveler”、“Final Assembly -”,总是在开头,并且“ -Traveler”总是在最后。中间的任何东西都可以改变。如何使这更加动态?

【问题讨论】:

    标签: xml perl dynamic substring


    【解决方案1】:

    您传递给findnodes() 的参数是一个XPath 表达式。您的示例使用简单的相等检查(此位:@NAME="Final Assembly - 1/16-Traveler),但您可以使用其他选项,包括 XPath functions。比如contains()函数:

    $dom->findnodes('//TRAVELER[contains(@NAME,"Final Assembly")]/...')
    

    你也可以使用and来组合表达式:

    $dom->findnodes('//TRAVELER[contains(@NAME,"Final Assembly") and contains(@NAME,"traveler")]/...')
    

    这是您可以在XPath Sandbox 中使用的示例。

    我们也可以通过 XML::LibXML::XPathContext 注册您自己的函数,用 Perl 编写。请参阅文档的Custom XPath functions 部分。

    【讨论】:

    • 是否有可以调用的所有内容的列表,例如包含/查找节点?我最近一直在用这个。带有示例的文档?另外,非常感谢! grantm.github.io/perl-libxml-by-example
    • 我不太确定你在问什么。我已经在我的答案中链接到 XPath 函数列表。 XML::LibXML 支持 XPath 1.0(但不支持 2.0)的函数。如果您询问其他 Perl 方法,您可以像 findnodes 这样调用,docs for XML::LibXML::Node 是个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2011-10-18
    相关资源
    最近更新 更多