xml - Perl XML:LibXML - 动态节点
问题描述
我一直在尝试用 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 ”始终位于末尾。中间的任何东西都可以改变。我如何使这更加动态?
解决方案
您传递给的参数findnodes()
是一个 XPath 表达式。您的示例使用了一个简单的相等检查(这一点:),@NAME="Final Assembly - 1/16-Traveler
但还有其他选项,包括您可以使用的XPath 函数。例如,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 编写。请参阅文档的自定义 XPath 函数部分。
推荐阅读
- algorithm - 体育比赛日程表,换对
- python - 在 PE 完整图像中找到数据但在片段中没有?
- django - 在 django orm 中使用 group by 获取累积运行总和
- r - 可以更简洁地表达这些 R 函数吗?cumcsum()
- sql - WHERE 子句在运行时确定,这可以用没有动态 SQL 的 CASE 来完成吗?
- c# - 如果默认添加 DbContext 范围,为什么要添加它?
- python - Tensorflow ValueError:未知激活函数:heaviside
- javascript - 尝试在 React.js 中使用 Uppy 时出错
- django - Django 通过路径传递变量,导致路径重复。如何摆脱那个循环?
- python - 在python中定义存根