xpath - 基于元素部分匹配拉节点的xpath
问题描述
在下面的 xml 片段中,我想为不同的批次提取行节点,这本质上是一个时间戳,即JP1800
代表日本 18 点钟时间。
//*[Batch='LN12000']
拉出所有伦敦中午节点,同时
data/row
拉出所有节点,包括空Batch
值。
//*[Batch='LN'*]
如果不起作用,我将如何拉所有伦敦时间 ?
<?xml version="1.0"?>
-<data>
+<header>
+<row>
+<row>
+<row>
-<row>
<Date>2019-10-21</Date>
<Series>23</Series>
<OnTheRun>N</OnTheRun>
<Depth>0</Depth>
<Batch>JP1700</Batch>
</row>
-<row>
<Date>2019-10-21</Date>
<Series>23</Series>
<OnTheRun>N</OnTheRun>
<Depth>4</Depth>
<Batch>JP1800</Batch>
</row>
解决方案
听起来您正在寻找类似starts-with
功能的东西。:
//header/row/Batch[starts-with(.,"LN")]
这里我们有一些 PHP 代码示例,请看:
<?php
$xml = <<<XML
<?xml version="1.0"?>
<data>
<header>
<row>
<Date>2019-10-21</Date>
<Series>23</Series>
<OnTheRun>N</OnTheRun>
<Depth>0</Depth>
<Batch>JP1700</Batch>
</row>
<row>
<Date>2019-02-05</Date>
<Series>27</Series>
<OnTheRun>X</OnTheRun>
<Depth>89</Depth>
<Batch>LN9877</Batch>
</row>
</header>
</data>
XML;
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$query = $xpath->query('//header/row/Batch[starts-with(.,"LN")]');
/** @var DOMElement $node */
foreach ($query as $node) {
print($node->nodeValue); //outputs LN9877
}
https://www.w3.org/TR/1999/REC-xpath-19991116/#function-starts-with
推荐阅读
- javascript - 如何在 Vue 类组件中使用 date-fns?
- node.js - 测试函数时替换变量的值
- office-js - 教程中的 Microsoft Office 加载项无响应
- magento2.2 - MISCONF Redis 配置为保存 RDB 快照,但目前无法持久保存在磁盘上。可能修改数据集的命令被禁用
- php - 如何在 FormData 对象中捕获返回值
- algorithm - 如何找到两列之间差异的绝对值之和?
- kubernetes - Helm 更改部署工件的名称
- java - Spring AOP切面不拦截注解的方法
- missing-data - 使用具有 NaN 值的 SMOTE
- java - 等价于 graal.js 脚本引擎中的 Nashorn 的 importPackage