我想从XML文档(它实际上是一个转换为XML的HTML表格)中查找某个元素的最小值。但是,这不符合预期。使用XPath 1.0查找最小值不起作用
查询结果类似于How can I use XPath to find the minimum value of an attribute in a set of elements?中使用的那个。它看起来像这样:
/table[@id="search-result-0"]/tbody/tr[
not(substring-before(td[1], " ") > substring-before(../tr/td[1], " "))
]
上执行的示例XML
<table class="tablesorter" id="search-result-0">
<thead>
<tr>
<th class="header headerSortDown">Preis</th>
<th class="header headerSortDown">Zustand</th>
</tr>
</thead>
<tbody>
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Ausgepack und doch nie gebraucht</td>
</tr>
<tr>
<td width="45px">20 CHF</td>
<td width="175px">Ausgepack und doch nie gebraucht</td>
</tr>
<tr>
<td width="45px">25 CHF</td>
<td width="175px">Ausgepack und doch nie gebraucht</td>
</tr>
<tr>
<td width="45px">35 CHF</td>
<td width="175px">Ausgepack und doch nie gebraucht</td>
</tr>
<tr>
<td width="45px">14 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
</tbody>
</table>
查询返回以下结果:
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Ausgepack und doch nie gebraucht</td>
</tr>
-----------------------
<tr>
<td width="45px">14 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
-----------------------
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
-----------------------
<tr>
<td width="45px">15 CHF</td>
<td width="175px">Gebraucht, aber noch in Ordnung</td>
</tr>
为什么有更多的节点不是一个回来了?由于只有一个最小值,所以应该只返回一个节点。有人看到查询有什么问题吗?它应该只返回包含14 CHF
的节点。使用http://xpath.online-toolz.com/tools/xpath-editor.php
你是对的。调用节点集上的函数仅返回第一个节点的结果而不是集合。有关如何解决这个问题的任何建议? – str 2014-09-23 10:00:59
@str我很想说这在XPath 1.0中是不可能的。你能预先操作元素吗?如果'substring-before'可以是在应用XPath表达式之前执行的一个独立步骤(这样就剩下了),那么我有一个解决方案。 – 2014-09-23 10:18:57
我同意Mathias。这*在XPath 1.0中是不可能的,无需更改输入XML。 – Tomalak 2014-09-23 10:43:07